Je travaille sur un logiciel qui se connecte à un serveur de données en temps réel (en utilisant TCP) et j'ai quelques connexions qui tombent. Je suppose que les clients ne lisent pas assez rapidement les données provenant du serveur. Par conséquent, je voudrais surveiller mes sockets TCP. Pour cela j'ai trouvé l'outil "ss".
Cet outil permet de voir l'état de chaque socket - voici un exemple de ligne de sortie de la commande 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
Ma question est: que signifie la partie mémoire? En regardant le code source de l'outil, j'ai constaté que les données proviennent d'une structure de noyau ( sock
en sock.h
). Plus précisément, il provient des domaines:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
Quelqu'un sait-il ce qu'il veut dire? Mes suppositions sont:
rmem_alloc
: taille du tampon entrantwmem_alloc
: taille du tampon sortantsk_forward_alloc
: ???sk->sk_wmem_queued
: ???
Voici mes tailles de tampons:
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