Как проверить, сколько соединений открыто в данный момент на конкретном порту TCP?


8

Я делаю некоторые кометные тесты и хотел бы посмотреть, сколько у меня открытых соединений.

На самом деле я использую netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Но для того, чтобы перечислить число, нужно около 4-6 минут. Есть ли инструмент, который может показать его в реальном времени? Количество открытых соединений составляет от 100 000 до 250 000.


Исходя из того, что вы пытаетесь достичь, рассматривали ли вы вопрос об использовании NetFlow и анализатора?
— SpacemanSpiff

@SpacemanSpiff Я надеюсь, что есть какое-то простое решение, но я взгляну на NetFlow, так как не уверен, работает ли он с коммутатором HP.
— Ненад

Вы знаете, мне интересно, может ли запрос perfmon или WMI вернуть эти данные из стека TCP быстрее ... все же ... вы после открытых портов или активных передач данных?
— SpacemanSpiff

@SpacemanSpiff Я слежу за открытыми портами
— Nenad

Может быть, запрос SNMP? ... просто выбрасываю идеи для вас.
— SpacemanSpiff

Ответы:


8

Не знаю, lsofлучше ли, но попробуйте:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l

на самом деле это займет 5 секунд, но у меня 20 000 подключений, и подсчет :-) сообщит, сколько времени пройдет 100K
— Nenad

обновление: есть некоторые проблемы с нашими клиентами комет, но lsof намного быстрее 10 секунд для 30 000 подключений, будет обновляться после того, как я исправлю проблемы с кометами и смог проверить соединения свыше 100K
— Nenad

обновление: 15 секунд, чтобы показать 130 000 соединений - спасибо! Это делает работу для меня для более детального решения, должен использоваться сетевой анализатор.
— Ненад

удивительный! Вы также можете использовать переключатель -t- возможно, это даст вам небольшой импульс.
— ThorstenS

5

Если вам просто нужно посмотреть статистику подключений, попробуйте ssутилиту из iprouteпакета:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

Вы также можете просмотреть подробную информацию обо всех установленных соединениях, как это:

ss -n state established

... или только ssh-соединения:

ss -n state established '( dport = :ssh or sport = :ssh )'

Некоторые номера раздела в нижней части этой страницы также могут вас заинтересовать.


+1 за неиспользование устаревшего netstat
— Джошуа Гриффитс

Я знаю, что это было 6 лет назад, но есть ли у вас или у кого-то еще ссылка на что-то, что нарушает вывод статуса ss. Мне особенно интересно узнать количество портов в конце строки TCP. Я провожу некоторое сравнительное тестирование между двумя серверами, выступающими в качестве балансировщиков нагрузки, и на одном счетчик портов колеблется около 1000, а на другом он всегда равен 0. Что конкретно это означает?
— RobertRSeattle

1
@RobertRSeattle с помощью исходного кода ss кажется, что это число читается из tcp_bind_bucketстроки /proc/slabinfoфайла. Вы можете сравнить выходные данные awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfoмежду двумя вашими серверами. Дальнейшие подробности, вероятно, можно найти где-нибудь в исходниках ядра.
— Артём

1

Другой вариант будет читать /proc/net/tcpнапрямую. Чтобы увидеть все установленные соединения TCP на 8080, вы должны сделать что-то вроде

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Если вы хотите сделать это в одном процессе (без затрат на ввод-вывод) и обработать угловые случаи, то ниже показано, сколько УСТАНОВЛЕННЫХ TCP-соединений имеет локальный порт 8080:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Если программное обеспечение на вашем компьютере, прослушивающем 8080, поддерживает IPv6, вам также необходимо прочитать /proc/net/tcp6; если программа использует сокеты IPv6, там будут отображаться соединения, даже если они используют IPv4.


0

проще

#netstat -at | wc -l

Будет отображаться номер TCP-соединения в системе ...


Это займет больше времени, так как вы не используете флаг "n", чтобы остановить поиск всех имен хостов. Он также покажет другие вещи, кроме подключений к порту 8080, о которых речь шла.
— Дженни Д
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.