Estoy trabajando en un software que se conecta a un servidor de datos en tiempo real (usando TCP) y tengo algunas conexiones caídas. Supongo que los clientes no leen los datos que provienen del servidor lo suficientemente rápido. Por lo tanto, me gustaría monitorear mis sockets TCP. Para esto encontré la herramienta "ss".
Esta herramienta permite ver el estado de cada socket: aquí hay una línea de ejemplo de la salida del comando 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
Mi pregunta es: ¿qué significa la parte de memoria? Mirando el código fuente de la herramienta, descubrí que los datos provienen de una estructura del núcleo ( sock
in sock.h
). Más precisamente, proviene de los campos:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
¿Alguien sabe lo que significan? Mis conjeturas son:
rmem_alloc
: tamaño del búfer entrantewmem_alloc
: tamaño del búfer de salidask_forward_alloc
: ???sk->sk_wmem_queued
: ???
Aquí están mis tamaños de tampones:
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