Я працюю над програмним забезпеченням, яке підключається до сервера даних у режимі реального часу (за допомогою 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
в 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