Как регистрировать загрузку процессора?

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

6 ответов

Решение

Это работает очень хорошо:

 while true; do uptime >> uptime.log; sleep 1; done
  • Это будет регистрировать загрузку вашего процессора каждую секунду и добавлять его в файл uptime.log,

    Затем вы можете импортировать этот файл в Gnumeric или электронную таблицу OpenOffice, чтобы создать красивый график (выберите "разделенные пробелами" при импорте).

Как заметил Скайн, этого будет недостаточно для диагностики проблемы. Итак, дополнительно, запустите это (или используйте его ответ для этой части):

while true; do (echo "%CPU %MEM ARGS $(date)" && ps -e -o pcpu,pmem,args --sort=pcpu | cut -d" " -f1-5 | tail) >> ps.log; sleep 5; done
  • Это добавит Топ 10 самых ресурсоемких процессов в файл ps.log каждые пять секунд.

    Обратите внимание, что это не полный груз информации top даст вам. Это только топ-10, и только их загрузка ЦП, использование памяти и первый аргумент (т.е. их команда без дополнительных аргументов, как в /usr/bin/firefox)

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

Вот как будут выглядеть эти файлы:

uptime.log

~$ cat uptime.log 
 22:57:42 up 1 day,  4:38,  4 users,  load average: 1.00, 1.26, 1.21
 22:57:43 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 22:57:44 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 22:57:45 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 ...

ps.log

%CPU %MEM ARGS Mo 17. Jan 23:09:47 CET 2011
 0.7  0.9 /usr/bin/compiz
 0.8  0.5 /usr/lib/gnome-panel/clock-applet
 1.1  1.7 /opt/google/chrome/chrome
 1.2  0.3 /usr/bin/pulseaudio
 1.8  4.0 /opt/google/chrome/chrome
 2.6  1.5 /opt/google/chrome/chrome
 2.6  3.2 /usr/bin/google-chrome
 3.6  2.6 /opt/google/chrome/chrome
 4.9  1.5 /usr/bin/X
 5.7  1.6 /opt/google/chrome/chrome
%CPU %MEM ARGS Mo 17. Jan 23:09:48 CET 2011
 0.7  0.9 /usr/bin/compiz
 0.8  0.5 /usr/lib/gnome-panel/clock-applet
 1.0  1.7 /opt/google/chrome/chrome
 1.2  0.3 /usr/bin/pulseaudio
 1.8  4.0 /opt/google/chrome/chrome
 2.6  1.5 /opt/google/chrome/chrome
 2.6  3.2 /usr/bin/google-chrome
 3.6  2.6 /opt/google/chrome/chrome
 4.9  1.5 /usr/bin/X
 5.7  1.6 /opt/google/chrome/chrome
 ...

Вы можете запустить top Команда в пакетном режиме с помощью -b вариант, затем сбросьте это в файл.

При запуске вашего ПК откройте терминал, запустите

top -b > ~/cpu.txt

Затем, когда ваш компьютер зависает, просто откройте (возможно, огромный) текстовый файл и проверьте последнюю запись на предмет некоторых деталей о том, что работало непосредственно перед сбоем. На самом деле файл будет настолько тупо большим, что вам лучше запустить tail -250 ~/cpu.txt вместо.

Также проверьте ваш /var/log/kern.log на случай, если ваша проблема связана с оборудованием (маловероятно, если это происходит только после обновления, но, тем не менее, стоит проверить).

Arup нашел отличный ответ на этот вопрос о Unix и Linux, который использует top:

top -n 1 -b > top.out

Это даст вам 1 итерацию top затем остановите, а затем нажмите его в файл.

Для тех, кому нужно запустить эту команду после завершения сеанса работы с замазкой ( SSH-клиентом). вы можете использовать команду screen (или установите его с помощью apt-get)

Вот сценарий ведения журнала, который я написал и использую: cpu_logger.py . Он непрерывно ведет журнал в набор чередующихся файлов журнала. Это позволяет мне писать отчеты в Google следующим образом: Загрузка ЦП Chrome Google Meet по-прежнему слишком высока (см. графики и загрузку ЦП во время Google Meet с моей камерой ВКЛ и ВЫКЛ).

Вы также можете использовать cpu_load.py . Пример запуска и вывода cpu_load:

      $ gs_cpu_load 
Measuring CPU load for 2 seconds...
Overall: 15.21%
Individual CPUs: 13.60%  12.20%  15.20%  14.90%  14.60%  18.50%  15.80%  16.90%

См. также мой ответ здесь: Переполнение стека: как получить общее использование ЦП (например, 57%) в Linux и мои вопросы и ответы здесь: Unix и Linux: как получить общее использование ЦП (например, 57%) в Linux .

У меня есть скрипт для загрузки процесса с ротацией логов:

      #!/bin/bash 
MaxFileSize=204800
DaysToKeep=7
echo -e "\n Fecha:"`date` >> /var/log/ps.log
echo -e "\n Uptime: "`uptime` >> /var/log/ps.log
ps -e -o pcpu,pmem,args --sort=pcpu | tail >> /var/log/ps.log
#Get size in bytes** 
file_size=`du -b /var/log/ps.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then   
    timestamp=`date +%s`
    mv /var/log/ps.log /var/log/ps.log.$timestamp
    gzip /var/log/ps.log.$timestamp
    touch /var/log/ps.log
    # remove old files
    find /var/log -name "ps.log.*" -type f -mtime +$DaysToKeep -delete 
fi

Мой первоисточник можно посмотреть здесь

Другие вопросы по тегам