Подсчет одновременных сетевых сессий в Linux

19 Jul 2018 | Автор: dd |

Поднял под клиентов сервер на выделенном гигабите с 40 тысячами IPv6 прокси, под парсинг инстаграмма. Клиент, не долго думая, выдал 100% утилизацию канала, т.ч стало интересно – каким образом можно посчитать количество конкурирующих сессий.

Основной инструментарий для получения сетевой статистики – это команда netstat

Например суммарная статистика по протоколам, доступна в выводе команды:
# netstat -e -s
Если мы хотим увидеть вообще всю статистику, то это можно сделать командой:
# netstat -a
и из неё уже производить выборку через grep по протоколам, установленным соединениям или портам. Например, вывести все установленные соединения:
# netstat -a | grep 'ESTABLISHED'
или подсчитать их количество
# netstat -a | grep 'ESTABLISHED'| wc -l
статистику по всем протоколам, можно получить командой:
# netstat -s -e
но основная проблема netstat в том, что он перебирает сессии одну за другой и в моем случае, вывода команды можно ждать 5-10 минут.

Поэтому для быстрого просмотра активных сессий, лучше воспользоваться более новой командой сетевой статистики, ss. Например для получения полного количества активных сессий, можно использовать:
# ss -s
Вывод будет практически мгновенным. Даже если подсчитывать число сессий в очереди на подключение, то перебор и вывод будет более шустрым.
# ss -t -a | wc -l
Если надо посмотреть общую статистику, то делается это командой
# ss -s

Как вариант, для netstat, можно посмотреть статистику по сессиям, количество установленных, в режиме закрытия и т.д
# netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c

Если же мы хотим посмотреть кличество сессий установленных, например, с каким нибудь внешним айпи (например полезно при проверке прокси фермы), то для этого следует использовать ключи src или dst

Например внешний модем с айпишником 192.168.1.151

# ss src 192.168.89.151

данная команда выведет все установленные сессии, если же добавить счетчик, то число установленных сессий
# ss src 192.168.89.151|wc -l
аналогичный результат даст и команда
# ss -t | grep 192.168.89.151|wc -l
где -t выводит все TCP сокеты, можно также использовать -u и -x для UDP и UNIX сокетов соответственно
а вот если добавить ключ -a для сессий находящихся в состоянии прослушки, то число сессий увеличится
# ss -t -a | grep 192.168.89.151|wc -l

ss-listing

VN:F [1.9.21_1169]
Rating: 3.6/10 (18 votes cast)
VN:F [1.9.21_1169]
Rating: -3 (from 3 votes)
Подсчет одновременных сетевых сессий в Linux, 3.6 out of 10 based on 18 ratings

Отзывов: 3 на «Подсчет одновременных сетевых сессий в Linux»

  1. Автор: Alex на 19 Jul 2018

    netstat -an | grep “ESTABLISHED” | wc -l
    тоже будет быстрым.
    -n отключает резолв хостов

    [Reply]

    anchous Reply:

    спасибо за дополнение

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 5.0/5 (1 vote cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  2. Автор: Иван на 05 Jun 2023

    Не работает команда из комментария Алекса
    Выводит 0

    [Reply]

    VA:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.21_1169]
    Rating: 0 (from 0 votes)

Ваш отзыв