Использование процессора Linux и история выполнения процессов

38

Есть ли способ узнать, какой процесс (ы) вызвал наибольшее использование процессора?

У меня AMAZON EC2 Linux, загрузка процессора которого достигает 100 процентов, и заставляет меня перезагружать систему. Я не могу даже войти через SSH (используя putty).

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

Я знаю , о sarи topкомандах , но я не мог найти историю выполнения процесса в любом месте. Вот изображение из инструмента мониторинга Amazon EC2, но я хотел бы знать, какой процесс вызвал это:

введите описание изображения здесь

Я также пытался, ps -eo pcpu,args | sort -k 1 -r | head -100но не повезло, находя столь высокую загрузку процессора.

PMoubed
источник

Ответы:

34

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

Первый способ - настроить pidstat для работы в фоновом режиме и получения данных.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Это даст вам довольно подробный обзор работы системы с десятиминутными интервалами. Я бы предложил, чтобы это был ваш первый порт захода, так как он производит наиболее ценные / надежные данные для работы.

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

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

accton on

Это включит учет процессов (если еще не добавлен). Если он не работал до этого, потребуется время для запуска.

Будучи запущенным, скажем, 24 часа - вы можете запустить такую ​​команду (которая будет выдавать такой результат)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Столбцы упорядочены так:

  1. Количество звонков
  2. Процент звонков
  3. Количество реального времени, потраченного на все процессы этого типа.
  4. Процент.
  5. Время процессора пользователя
  6. процент
  7. Системное процессорное время.
  8. Средний IO звонки.
  9. процент
  10. Название команды

То, что вы будете искать, это типы процессов, которые генерируют наибольшее время ЦП пользователя / системы.

Это разбивает данные на общее количество процессорного времени (верхняя строка), а затем на то, как это процессорное время было разделено. Учет процессов учитывается надлежащим образом только тогда, когда он включен, когда процессы появляются, поэтому, вероятно, лучше перезапустить систему после того, как она будет включена, чтобы обеспечить учет всех служб.

Это ни в коем случае не дает вам четкого представления о том, какой процесс может быть причиной этой проблемы, но может дать вам хорошее чувство. Поскольку это может быть 24-часовой снимок, существует вероятность искаженных результатов, так что имейте это в виду. Кроме того, он всегда должен регистрироваться, поскольку он является функцией ядра и, в отличие от pidstat, всегда будет выводить данные даже во время большой нагрузки.

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

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Это может также дать вам некоторые подсказки относительно того, что может быть причиной проблемы.

Мэтью Ифе
источник
Очень хороший и подробный ответ, хорошая работа!
Барт Де Вос
2
MIfe, если вы еще не использовали, попробуйте! Он собирает ту же информацию, что и pidstat, но представляет ее в интерфейсе, гораздо более подходящем для интерактивного исследования. Он также имеет команду atopsar, если вы предпочитаете отчеты в стиле sar.
sciurus
18

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

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

Это действительно замечательная часть программного обеспечения.

Джефф Ферланд
источник
3

Такие программы, как psmon и monit, могут быть полезны для вас. Они могут отслеживать процессы, запущенные в вашей системе, и, если превышен какой-либо порог (загрузка ЦП, использование памяти ...), вы можете настроить их отправлять вам по электронной почте отчет о том, что происходит.

Также возможно автоматически перезапускать неправильные процессы.

Янне Пиккарайнен
источник
0

Одним из решений является написание скрипта, который запускается через одну минуту cron или в цикле сна и отправляет вам задание / дамп электронной почты / scp на том ebs ... с соответствующим выводом (dmesg, pstree -pa и ps aux, возможно vmstat) в тот момент, когда он находит среднюю нагрузку за определенный предел ...

rackandboneman
источник