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
in 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