Довольно часто в ходе устранения неполадок и настройки я думаю о следующих настройках ядра Linux:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Кроме fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, иnet.ipv4.tcp_wmem
они , кажется, важные ручки замарать , когда вы настраиваете ящик для высоких уровней параллелизма.
Мой вопрос: как я могу проверить, сколько элементов в каждой из этих очередей? Обычно люди просто устанавливают их слишком высоко, но я хотел бы зарегистрировать эти размеры очереди, чтобы помочь предсказать будущие сбои и выявить проблемы, прежде чем они проявятся для пользователя заметным образом.
linux
kernel
networking
tcp
Колин Хостерт
источник
источник
Ответы:
Я тоже задумался над этим и был мотивирован вашим вопросом!
Я понял, насколько близко я могу подойти к каждой из перечисленных вами очередей, с некоторой информацией, связанной с каждой из них. Я приветствую комментарии / отзывы, любое улучшение мониторинга облегчает управление!
Будет показано текущее глобальное количество соединений в очереди, вы можете разбить его на порты и поместить это в инструкции exec в snmpd.conf, если вы хотите опросить его из приложения мониторинга.
От:
Они покажут вам, как часто вы видите запросы из очереди:
От:
http://linux.die.net/man/5/proc
Этот (только для чтения) файл показывает количество открытых файлов. Он содержит три числа: количество выделенных файловых дескрипторов, количество свободных файловых дескрипторов и максимальное количество файловых дескрипторов.
Если вы можете создать список исключений служб (netstat -an | grep LISTEN), то вы можете определить, сколько соединений используется для эфемерной активности:
Также следует следить (из SNMP):
Также может быть интересно собрать статистику обо всех состояниях, видимых в этом дереве (установленный / time_wait / fin_wait / etc):
Вы должны были бы отследить / связать свою систему для запросов setsockopt. Я не думаю, что статистика по этим запросам отслеживается иначе. Это не то значение, которое меняется от моего понимания. Развернутое приложение, вероятно, запросит стандартную сумму. Я думаю, что вы могли бы «профилировать» свое приложение с помощью strace и соответствующим образом настроить это значение. (Обсудить?)
Чтобы отследить, насколько близко вы находитесь к пределу, вы должны смотреть на среднее и максимальное значения из полей tx_queue и rx_queue (регулярно):
Чтобы отслеживать ошибки, связанные с этим:
Также следует отслеживать глобальный буферный пул (через SNMP):
источник
Я думаю, что вы можете получить эти данные с помощью SystemTap. Вот справочное руководство Redhat (pdf) . Существует также руководство для начинающих (PDF) .
Инструмент выглядит достаточно универсальным, чтобы позволить вам получать эти данные, в частности
probe::netdev.rx
выглядит как то, что даст вам информацию о входящих записях, теперь вам «нужно только» найти либо чистый размер очереди в буфере, либо что-то, что подсчитывает вещи выходя из очереди…источник