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