как проверить кольцо rx, max_backlog, и max_syn_backlog размер

Общая библиотека HOWTO объясняет большинство механизмов, включенных, и динамическое руководство загрузчика вдается в большее количество подробностей. Каждый вариант Unix поступает по-своему, но большая часть использования тот же формат исполняемых файлов (ELF) и имеет подобных динамических компоновщиков (полученный на основании Соляриса). Ниже я буду суммировать общее поведение с вниманием на Linux; проверьте руководства своей системы на полную историю.

Короче говоря когда это ищет динамическую библиотеку (.so файл) попытки компоновщика:

  • каталоги, перечисленные в LD_LIBRARY_PATH переменная среды (DYLD_LIBRARY_PATH на OSX);
  • каталоги перечислены в rpath исполняемого файла;
  • каталоги на системном пути поиска, который (на Linux, по крайней мере) состоит из записей в /etc/ld.so.conf плюс /lib и /usr/lib.

rpath хранится в исполняемом файле (это DT_RPATH или DT_RUNPATH динамический атрибут). Это может содержать полные пути или пути, запускающиеся с $ORIGIN указать на путь относительно местоположения исполняемого файла (например, если исполняемый файл находится в /opt/myapp/bin и его rpath $ORIGIN/../lib:$ORIGIN/../plugins затем динамический компоновщик заглянет /opt/myapp/lib и /opt/myapp/plugins). rpath обычно определяется, когда исполняемый файл компилируется, с -rpath опция к ld, но можно изменить его впоследствии с chrpath.

В сценарии Вы описываете, если Вы - разработчик или поставщик программного блока приложения и предназначаете, чтобы это было установлено в a …/bin, …/lib структура, затем свяжитесь с -rpath='$ORIGIN/../lib'. Если Вы устанавливаете предварительно созданный двоичный файл в своей системе, любой поместил библиотеку в каталог на пути поиска (/usr/local/lib если Вы - системный администратор, иначе каталог, к которому Вы добавляете $LD_LIBRARY_PATH), или попытка chrpath.

41
11.05.2011, 12:33
2 ответа

Я также задался вопросом это, и был мотивирован Вашим вопросом!

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

net.core.somaxconn

сеть ipv4.tcp_max_syn_backlog

сеть core.netdev_max_backlog

$ netstat -an | grep -c SYN_RECV 

Покажет текущее глобальное количество соединений в очереди, можно разбить это на порт и поместить это в исполнительные операторы в snmpd.conf, если Вы хотели опросить его из приложения мониторинга.

От:

netstat -s

Они покажут Вам, как часто Вы видите запросы от очереди:

146533724 packets directly received from backlog
TCPBacklogDrop: 1029
3805 packets collapsed in receive queue due to low socket buffer

fs.file-макс.

От:

http://linux.die.net/man/5/proc

$ cat /proc/sys/fs/file-nr
2720    0       197774

Этот файл (только для чтения) дает количество файлов, в настоящее время открытых. Это содержит три числа: количество выделенных дескрипторов файлов, количество бесплатных дескрипторов файлов и максимальное количество дескрипторов файлов.

сеть ipv4.ip_local_port_range

Если можно создать список исключения сервисов (netstat - | grep, СЛУШАЮТ), затем, можно вывести, сколько соединений используется для эфемерного действия:

netstat -an | egrep -v "MYIP.(PORTS|IN|LISTEN)"  | wc -l

Должен также контролировать (от SNMP):

TCP-MIB::tcpCurrEstab.0

Может также быть интересно собрать статистику обо всех состояниях, замеченных в этом дереве (established/time_wait/fin_wait/etc):

TCP-MIB::tcpConnState.*

сеть core.rmem_max

сеть core.wmem_max

У Вас была бы к dtrace/strace своя система для запросов setsockopt. Я не думаю, что статистика для этих запросов прослежена иначе. Это не действительно значение, которое изменяется от моего понимания. Приложение, которое Вы развернули, вероятно, попросит стандартную сумму. Я думаю, что Вы могли 'представить' свое приложение с strace и настроить это значение соответственно. (обсудите?)

сеть ipv4.tcp_rmem

сеть ipv4.tcp_wmem

Чтобы отследить, как близко Вы к пределу, от которого необходимо было бы посмотреть на среднее число и макс. от tx_queue и rx_queue полей (регулярно):

# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 00000000:0FB1 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262030037 1 ffff810759630d80 3000 0 0 2 -1                
   1: 00000000:A133 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262029925 1 ffff81076d1958c0 3000 0 0 2 -1                

К дефектам записи, связанным с этим:

# netstat -s
    40 packets pruned from receive queue because of socket buffer overrun

Должен также контролировать глобальный 'буферный' пул (через SNMP):

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Memory Buffers
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 74172456
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 51629704
29
27.01.2020, 19:35

Я думаю, что Вы можете получать те данные с SystemTap. Вот справочник Redhat (PDF). Существует также, новички ведут (PDF).

Инструмент выглядит достаточно универсальным, чтобы позволить Вам получить те данные в особенности probe::netdev.rx похож на что-то, что даст Вам информацию о входящих записях, теперь "только" необходимо найти или сетевой размер очереди в буфере или что-то, что считает вещи, оставляя очередь …

2
27.01.2020, 19:35

Теги

Похожие вопросы