Sto lavorando a un software che si collega a un server di dati in tempo reale (utilizzando TCP) e alcune connessioni si interrompono. La mia ipotesi è che i client non leggano i dati provenienti dal server abbastanza velocemente. Pertanto, vorrei monitorare i miei socket TCP. Per questo ho trovato lo strumento "ss".
Questo strumento consente di vedere lo stato di ogni socket - ecco una riga di esempio dell'output 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
La mia domanda è: cosa significa la parte di memoria? Guardando il codice sorgente dello strumento ho scoperto che i dati provengono da una struttura del kernel ( sock
in sock.h
). Più precisamente, viene dai campi:
r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;
Qualcuno sa cosa significano? Le mie ipotesi sono:
rmem_alloc
: dimensione del buffer in entratawmem_alloc
: dimensione del buffer in uscitask_forward_alloc
: ???sk->sk_wmem_queued
: ???
Ecco le dimensioni dei miei buffer:
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