Netstat -s, показывающий (и растущий) "пакеты, удаленные из очереди приема" и "пакеты, свернутые в очереди приема"

Мы видим следующее:

[root@primary data]# netstat -s | grep buffer ; sleep 10 ; netstat -s | grep buffer
    20560 packets pruned from receive queue because of socket buffer overrun
    997586 packets collapsed in receive queue due to low socket buffer
    20587 packets pruned from receive queue because of socket buffer overrun
    998646 packets collapsed in receive queue due to low socket buffer
[root@primary data]#

Не берите в голову, вышеупомянутое является недавно перезагруженной коробкой... Около 1 часа безотказной работы. У нас недавно была коробка, которая просуществовала 2 месяца, и эти контрагенты превратятся в большие миллионы (XXX миллионов).

Мы попытались изменить различные переменные sysctl...

Вот наши переменные sysctl, которые, я считаю, связаны между собой:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Кто-нибудь знает, как решить эти сокращенные пакеты из-за переполнения буфера сокета / коллапс пакетов (что я понимаю, не так плохо, как сокращенные пакеты)?

Благодарю.

2 ответа

На самом деле, вы не обязательно увеличивали буферы; просто максимально возможный размер очередей.

Когда вы открываете сокет, очереди устанавливаются в значение: net.core.rmem_default = 212992 net.core.wmem_default = 212992

Таким образом, увеличение максимумов ничего не даст, если приложение не вызывает setsockopt() для увеличения размера очереди (и терпит неудачу, если максимум меньше размера, который он пытается выделить).

Попробуйте увеличить значения выше.

Судя по предоставленной вами информации, и, поскольку вы, похоже, уже увеличили буферы, проблема, скорее всего, заключается в вашем приложении. Основная проблема здесь заключается в том, что, хотя ОС получает сетевые пакеты, они не обрабатываются достаточно быстро и, следовательно, заполняют очередь.

Это не обязательно означает, что приложение само по себе слишком медленное, также возможно, что оно не получает достаточное количество процессорного времени из-за слишком большого количества других процессов, запущенных на этой машине.

Другие вопросы по тегам