ฉันกำลังทำงานกับซอฟต์แวร์ที่เชื่อมต่อกับเซิร์ฟเวอร์ข้อมูลแบบเรียลไทม์ (โดยใช้ TCP) และฉันมีการเชื่อมต่อลดลง ฉันเดาว่าลูกค้าไม่อ่านข้อมูลที่มาจากเซิร์ฟเวอร์เร็วพอ ดังนั้นฉันต้องการตรวจสอบซ็อกเก็ต TCP ของฉัน สำหรับสิ่งนี้ฉันพบเครื่องมือ "ss"
เครื่องมือนี้อนุญาตให้เห็นสถานะของซ็อกเก็ตทุกอัน - นี่คือตัวอย่างบรรทัดของเอาต์พุตของคำสั่ง ss -inm 'src *:50000'
ESTAB 0 0 184.7.60.2:50000 184.92.35.104:1105
mem:(r0,w0,f0,t0) sack rto:204 rtt:1.875/0.75 ato:40
คำถามของฉันคืออะไรส่วนความจำหมายถึงอะไร ดูที่ซอร์สโค้ดของเครื่องมือฉันพบว่าข้อมูลมาจากโครงสร้างเคอร์เนล ( sock
ในsock.h
) แม่นยำยิ่งขึ้นมันมาจากฟิลด์:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
มีใครรู้บ้างว่าพวกเขาหมายถึงอะไร? ฉันเดาว่า:
rmem_alloc
: ขนาดของบัฟเฟอร์ขาเข้าwmem_alloc
: ขนาดของบัฟเฟอร์ขาออกsk_forward_alloc
: ???sk->sk_wmem_queued
: ???
นี่คือขนาดบัฟเฟอร์ของฉัน:
net.ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_mem = 786432 1048576 1572864
net.core.rmem_default = 110592
net.core.wmem_default = 110592
net.core.rmem_max = 1048576
net.core.wmem_max = 131071