Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Если вам просто нужно посмотреть статистику подключений, попробуйте 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 )'

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

Другой вариант - прочитать /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.

проще

#netstat -at | wc -l

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