8

Сценарий: Внезапно мой компьютер чувствует себя вялым. Мышь движется, но окна открываются uptime возрастами и т.д. Время безотказной работы говорит, что нагрузка составляет 7,69 и поднимается.

Какой самый быстрый способ узнать, какие процессы являются причиной нагрузки?

Теперь "верхние" и подобные инструменты не являются ответом, потому что они либо показывают использование процессора или памяти, но не оба одновременно. Что мне нужно, так это единственная команда, которую я могу набрать, когда она произойдет - что-то, что выяснит любую из

Система пытается заменить 8 ГБ ОЗУ на диск, потому что процесс X ...

или же

Процесс X ищет по всему диску

или же

процесс X использует 400% CPU "

Итак, что я ищу, так это iostat, htop/atop и аналогичные инструменты, работающие в одном, с таким выводом:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Мне не нужен инструмент, который дает мне некоторые цифры, которые я могу проанализировать, но инструмент, который точно сообщает мне, какой процесс вызывает текущую нагрузку. Предположим, что пользователь перед клавиатурой едва знает, как написать "процесс", но пользователь быстро ошеломлен, когда дело доходит до "резидентного размера", "виртуальной памяти" или "жизненного цикла процесса".

Мой аргумент звучит так: пользователь замечает проблему. Причин может быть тысячи ... ну, почти :-) Пользователь хочет знать источник проблемы.

Текущие решения дают мне много цифр, и мне нужно знать, что означают эти цифры. Я ищу мета-инструмент. 99% данных не имеют отношения к проблеме. Поэтому инструмент должен искать процессы, которые занимают некоторый ресурс, и перечислять только те, которые указаны вместе с «этим процессом требуется много ЦП, он генерирует много IRQ, этот процесс выделяет много ОЗУ (и он продолжает расти)».

Это будет относительно короткий список. Для новичка будет гораздо проще найти виновника из этого списка, чем из вывода, скажем, htop который дает мне около 5000 чисел, но требует от меня сложения многопоточных процессов самостоятельно (у меня есть 50 строк, которые говорят VIRT 2750M но только 16 ГБ ОЗУ - машина должна заменить себя до смерти, но, конечно, это неверная интерпретация данных, которая может произойти быстро).

5 ответов5

6

"top" работает достаточно хорошо, если вы посмотрите на правильные числа. Посмотрим:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Теперь, если система работает медленно из-за того, что все ЦП заняты, она отображает столбцы "us" и "sy" в строке «Cpu (s):», близкой к 100%.

Если он медленный из-за перестановки, «Mem:» "free" показывает очень низкие значения, а «Swap:» "used" высокие значения.

Если он медленный из-за операций ввода-вывода в целом, то «Cpu (s):» "wa" говорит, что время затрачено на ожидание ввода-вывода.

Теперь, если вы знаете, что ожидания ввода-вывода являются проблемой, вы можете использовать программы "iotop", чтобы узнать, какие процессы создают большинство операций ввода-вывода.

2

Исходя из 400% использования, я предполагаю, что у вас есть четырехъядерный процессор. Ваша средняя нагрузка почти вдвое превышает емкость, и половина процессов ожидает ЦП.

Во- первых, renice вашей оболочки 0 или -10 , чтобы получить более отзывчивую систему, а затем использовать htop , чтобы найти обижая процесс (ы) и следует , что strace на данном процессе. Другие инструменты, которые могут быть полезны:

  • vmsat
  • sar
  • iostat
  • pmap
2

Мне действительно нужно улыбаться в ответах, потому что каждый из них сказал вам, чтобы вы запускали инструмент X. Единственная проблема в том, что если то, что вы видите, является прерывистым, не будет никакого способа сопоставить что-либо. Такой инструмент, как sar, может помочь, если вы запускаете его на достаточно высокой частоте, но я бы сказал, что collectl еще лучше.

Как и sar, вы запускаете его как демон, устанавливая RPM и выполняя /etc/init.d/collectl start .

Теперь, когда вы видите что-то вялое, collectl -p /var/log/collectl/filename --top воспроизведет данные и покажет вам лучшие процессы. Вы также можете просто запустить collectl --top и посмотреть их в реальном времени. Кстати, все, что вы можете делать в режиме реального времени, вы также можете воспроизводить.

Что касается загрузки процессора, что если вы перегружены прерываниями? collectl -sC не только покажет нагрузки на отдельные процессоры (или использует -sc для средней нагрузки), но и покажет, как они проводят свое время. Включите -j (-scj), и вы увидите количество прерываний / ЦП. Используйте верхний регистр -J и вы увидите ТИПЫ каждого прерывания / ЦП.

Конечно, если вам действительно нравится vmstat, вы всегда можете воспроизвести собранные данные с помощью --vmstat и он покажет исторические данные в формате vmstat.

Есть гораздо больше переключателей, чем у меня есть время, чтобы перечислить, но вы можете проверить это на SourceForge или просто Google.

1

Вялая мышь также может быть вызвана слишком высокой нагрузкой прерывания или USB-контроллерами, которые очень загружены (я полагаю, это USB-мышь).

1

vmstat может помочь вам в общих чертах. Пример использования:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Вы также можете запускать его каждые X секунд - просто добавьте число X после команды.

Изменить: с учетом комментариев ... Запишите в файл следующее и сделайте этот файл исполняемым. Он расскажет вам три лучших процесса на машине.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Если вы хотите узнать, какая память загружена в отличие от процессора, прочтите верхнюю справочную страницу и измените порядок отображения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .