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


41

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

Моє запитання: Як я можу перевірити, скільки предметів у кожній з цих черг? Зазвичай люди просто встановлюють їх надвисоко, але я хотів би записати ці розміри черги, щоб допомогти передбачити майбутні збої та вирішити проблеми, перш ніж вони виявляться помітним для користувача способом.


Це дивовижне питання. Мене цікавить проблема передачі та повторна передача TCP з високою роздільною здатністю.
dhchdhd

Відповіді:


29

Я теж дивувався цьому і мотивував ваше запитання!

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

net.core.somaxconn

net.ipv4.tcp_max_syn_backlog

net.core.netdev_max_backlog

$ netstat -an | grep -c SYN_RECV 

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

Цей файл (лише для читання) дає кількість відкритих файлів. Він містить три числа: Кількість виділених ручок файлів, кількість вільних ручок файлів та максимальна кількість ручок файлів.

net.ipv4.ip_local_port_range

Якщо ви можете скласти список виключень служб (netstat -an | grep LISTEN), то ви можете встановити, скільки підключень використовується для ефемерної діяльності:

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

Слід також контролювати (з SNMP):

TCP-MIB::tcpCurrEstab.0

Також може бути цікаво зібрати статистику про всі стани, які бачать у цьому дереві (встановлений / time_wait / fin_wait / тощо):

TCP-MIB::tcpConnState.*

net.core.rmem_max

net.core.wmem_max

Вам потрібно буде відстежувати / напружувати систему для запитів setockopt. Я не думаю, що статистика цих запитів відстежується інакше. Це насправді не цінність, яка змінюється з мого розуміння. Програма, яку ви розгорнули, ймовірно, вимагатиме стандартної суми. Я думаю, ви могли б "профілювати" свою програму з допомогою напруги і відповідно налаштувати це значення. (обговорювати?)

net.ipv4.tcp_rmem

net.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

2

Я думаю, ви можете отримати ці дані за допомогою SystemTap. Ось довідковий посібник Redhat (pdf) . Також є посібник для початківців (pdf) .

Інструмент виглядає досить універсальним, щоб отримати ці дані, зокрема probe::netdev.rxвиглядає як щось, що дасть вам інформацію про вхідні записи, тепер вам потрібно лише "знайти чистий розмір черги в буфері", або щось, що підраховує речі залишаючи чергу…

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.