Как записать загрузку процессора в файл, чтобы изучить проблему?
Это работает очень хорошо:
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, если ваша проблема связана с аппаратным обеспечением (маловероятно, если это происходит только после обновления, но, тем не менее, стоит проверить).
Я нашел большой ответ Christopher к этот вопрос на Unix и Linux, который использует top
:
top -n 1 -b > top.out
Это даст Вам 1 повторение top
затем остановка и затем продвинет его в файл.
Для тех, кто должен выполнить эту команду после Вашей шпаклевки (клиент SSH) конец сессии. можно использовать команду screen
(или установите его использование apt-get
)