Как найти процесс (ы), которые загружают машину

10

Сценарий: Внезапно мой компьютер чувствует себя вялым. Мышь движется, но окна открываются 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 ГБ ОЗУ - машина должна сама себя поменять, но, конечно, это неверная интерпретация данных, которая может произойти быстро).

Аарон Дигулла
источник
Я не понимаю почему. Симптомы, которые вы описываете, не являются признаками мусора на диске (не влияют на мышь). Медленная мышь - классический процессор на полную мощность.
Soandos
1
Это всего лишь пример. Пожалуйста, возьмите это с зерном соли. Представьте себе, что перед компьютером сидит нуб, который ничего не знает. Как он может легче всего выяснить, что происходит (то есть, не тратя полчаса, погугливая, что topзначит выход )
Аарон Дигулла
Вы ищете Linux-эквивалент диспетчера задач с графическим интерфейсом и всем, или что-то еще?
Soandos
Я ищу что-то, что я запускаю и которое говорит: «Процесс X загружает машину».
Аарон Дигулла

Ответы:

3

Мне нужно улыбаться в ответах, потому что каждый из них велел вам запустить инструмент 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.

Марк Сегер
источник
Спасибо; это не совсем то, что я искал, но, по крайней мере, это хорошая отправная точка.
Аарон Дигулла
Фантастический инструмент! А в Ubuntu (по крайней мере с 12.04) вам просто нужно установить пакет - он автоматически запускает демон при установке и после него перезагрузки :)
nealmcb
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», чтобы узнать, какие процессы создают большинство операций ввода-вывода.

ЦУС
источник
+1 Но я больше ищу инструмент, который делает этот анализ для меня и печатает процесс вместе с некоторой информацией, что не так. Я не хочу брать это из "сырых" цифр. Что-нибудь?
Аарон Дигулла
1
Извините, но вы не можете решить такие проблемы, как медлительность машины, не понимая на базовом уровне разницу между различными видами медлительности. Если такие инструменты существуют, я не знаю о них; скорее всего, вам нужен способный администратор компьютера / обслуживающий парень.
Zds
Было бы неплохо, если бы такой инструмент существовал, потому что, безусловно, можно определить это автоматически: если я могу сказать по выводам, то же самое можно сказать и о topкомпьютере. Это не Улыбка Моны Лизы, а просто некоторые цифры, чтобы найти «плохие».
Аарон Дигулла
2

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

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

  • vmsat
  • sar
  • iostat
  • pmap
Terpion
источник
1

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

Брюс ОНил
источник
Любые инструменты, которые говорят мне, какой драйвер / компонент вызывает высокую нагрузку IRQ?
Аарон Дигулла
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}'

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

Сардатрион - против злоупотребления SE
источник
Я ищу что-то более высокого уровня. Он должен запустить vmstat и проанализировать числа для меня, поэтому мне не нужно знать, что означает «cs» и является ли большой «cs» «хорошим» или «плохим».
Аарон Дигулла