У меня есть Linux-сервер, который постоянно перегружает свой сетевой адаптер, и мне нужно визуализировать, как и почему это происходит, в зависимости от подключений и загрузки ЦП. Как мне это сделать?
Например; для визуализации диска iowait я использую такие инструменты, как atop
и iotop
которые говорят мне PID процесса и его использование ЦП; используя эту информацию, я могу найти, какой PID перегружает сервер.
Проблема в том, что у меня такая же проблема с сетью, и я не могу изолировать и устранить проблему b / c. Я не могу найти, какие процессы связаны с какими подключениями (я могу использовать netstat
я знаю, но netstat
не сообщает мне об использовании ЦП).
Теперь, когда я прояснил это, мне нужно иметь возможность отслеживать conntrack и netfilter на предмет использования процессора и / или времени ядра. Как мне это сделать? Обычные инструменты, такие как ps
, top
, и htop
не способны на это. Мне предлагали проверить прерывания, но мне это кажется "неправильным".
Лучший способ, который я нашел, - это следить за временем ядра. Если время ядра велико, я проверю /proc/interrupts
. Для дальнейшей отладки я буду использовать perf
. pktstat
также хорошо визуализировать поток трафика.
collectl -stnc
тоже хорошо.
Вы можете использовать wirehark / ethereal / tcpdump для сброса всего трафика, неявно сбрасывая трафик, который перегружает ПК. Это не дает вам информации о процессоре, но точно сообщает, какие порты и данные задействованы, что должно привести вас непосредственно к задействованному процессу.
Как и все взаимодействия с проблемной системой, это измерение может повлиять на поведение, но оно также с большей вероятностью приведет к более быстрому ответу, чем к менее точному (IMO). Если это измерение заставляет систему работать правильно, а не отказывать желаемым образом, вы можете использовать касание и измерение с помощью внешнего устройства.
Вы также можете использовать iftop, чтобы отображать ограничения пропускной способности, но помните, что пропускная способность! = CPU.