Tôi đang làm việc trên một phần mềm kết nối với máy chủ dữ liệu Thời gian thực (sử dụng TCP) và tôi có một số kết nối bị mất. Tôi đoán là khách hàng không đọc dữ liệu đến từ máy chủ đủ nhanh. Vì vậy, tôi muốn theo dõi các ổ cắm TCP của tôi. Đối với điều này, tôi tìm thấy công cụ "ss".
Công cụ này cho phép xem trạng thái của mọi ổ cắm - đây là một dòng ví dụ về đầu ra của lệnh 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
Câu hỏi của tôi là: phần bộ nhớ có nghĩa là gì? Nhìn vào mã nguồn của công cụ tôi thấy rằng dữ liệu đến từ cấu trúc kernel ( sock
in sock.h
). Chính xác hơn, nó đến từ các lĩnh vực:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
Có ai biết ý nghĩa của chúng? Tôi đoán là:
rmem_alloc
: kích thước của bộ đệm trongwmem_alloc
: kích thước của bộ đệm ngoàisk_forward_alloc
: ???sk->sk_wmem_queued
: ???
Dưới đây là kích thước bộ đệm của tôi:
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