tcp listen queue в Linux
В FreeBSD netstat отличается от netstat linux, причем в лучшую сторону!
Например, netstat -Lan покажет listen queue, что иногда нужно для дебага непонятных проблем. Но в linux аналога нет! ( есть какие-то самодельные патчи на netstat с требованием к ядру 2.6.18+ =) ).
Что же делать? Awk спешит на помощь!
Если процесс все еще в listen queue, но соединение уже установлено, то netstat -nap будет показывать его уже как ESTABLISHED. Причем в качестве процесса будет указан “-”, т.е. accept() для него еще не был вызван. Нужно учесть, что это при включенных syncookies, Иначе, например, SYN_RCVD тоже нужно будет учитывать.
Если мы посчитаем все такие соединения, то как раз получим число соединений в listen queue. Тут очень помогает awk =)
netstat -ntp --tcp | fgrep ESTABLISHED | awk '{ if ($7 == "-") arrQueue[$4]=arrQueue[$4]+1; } END { for (service in arrQueue) print service" "arrQueue[service]}'
Так же awk может показать сколько памяти (в КБ) расходует сетевая подсистема. Делается это опять же при помощи netstat
netstat -na | awk 'BEGIN { RecvQ=0; SendQ=0; } { RecvQ+=$2; SendQ+=$3; } END { print "RecvQ " RecvQ/1024; print "SendQ " SendQ/1024; }'
|
|