Хотя, как уже указывалось, в / proc можно увидеть текущие размеры буфера сокетов по умолчанию, но также можно проверить их с помощью sysctl
(Примечание. Хотя имя включает ipv4, эти размеры также применяются ксокеты ipv6 - код ipv6 tcp_v6_init_sock () просто вызывает функцию ipv4 tcp_init_sock ()):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
Однако буферы сокетов по умолчанию просто устанавливаются при инициализации sock, но затем ядро динамически их масштабирует (если не установлено с помощью setsockopt () с SO_SNDBUF).Фактический размер буферов для текущих открытых сокетов может быть проверен с помощью команды ss
(часть пакета iproute
), которая также может предоставить кучу дополнительной информации о сокетах, таких как параметр управления перегрузкой и т. Д. Например, для просмотра текущего спискаоткрыть сокеты TCP (t
опция) и информацию о связанной памяти (m
):
ss -tm
Вот несколько примеров вывода:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.56.102:ssh 192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)
Вот краткое объяснение skmem (сокета)память) - для получения дополнительной информации вам нужно взглянуть на исходные коды ядра (например, sock.h ):
r:sk_rmem_alloc
rb:sk_rcvbuf - current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf - current transmit buffer size
f:sk_forward_alloc
w:sk_wmem_queued - persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops