Как я регистрирую использование ЦП на процесс?
У меня есть ящик на Линоде, который ведет себя странно. Время от времени процессор и дисковый ввод / вывод будут работать на 100%, и сервер перестает отвечать на запросы и должен быть загружен. Я хотел бы лучше исследовать, что происходит, но я не знаю, как найти, кто отвечает за все эти процессоры и ввод / вывод. Я использую Gentoo 2.6.18.
7 ответов
Вы можете попробовать сделать что-то вроде этого:
while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done
это покажет вам десятку лучших процессов с точки зрения использования процессора. Вы можете изменить число отображаемых процессов, изменив число 10 в "head -10" на другое число, и как часто оно будет обновляться, изменив 3 в "sleep 3" или полностью убрав часть "sleep 3".
Посмотрите на него, он напишет двоичный журнал почти всего, что вы, возможно, захотите, а затем вы можете использовать верхнюю часть, например, графический интерфейс пользователя, чтобы просмотреть временные интервалы дня (по умолчанию данные берутся каждые 5 минут). http://www.atcomputing.nl/Tools/atop/
Другие ответы только показали вам, как вы можете посмотреть на то, что происходит в настоящее время, что не помогает, если система была перезагружена.
Если вы хотите, чтобы эта информация была записана для будущих поколений (или для выставления счетов, или для любого другого использования, которое у вас также может быть), вам нужен процесс учета.
Вот руководство, которое я нашел, но, честно говоря, прошло уже десять лет с тех пор, как я использовал учет процессов.
Принятый ответ сортируется по использованию ЦП в течение всего времени процесса, а не по краткосрочному использованию ЦП.
Вы можете получить десятку лучших процессов по использованию ЦП за произвольный интервал, используяtop
в пакетном режиме:
$ top -b -n 1 -d 3 -o +%CPU | sed -e '1,/PID/d' | head -10
Здесь-d 3
определяет интервал. Согласно справочной странице Ubuntu 21.10, поддерживаются интервалы, кратные 0,1 секунды. Он не жалуется, если вы указываете что-то более точное, но я не знаю, действительно ли он производит измерение за более короткое время.
The sed -e '1,/PID/d'
просто обрезает сводную информацию и заголовок, но вы можете оставить их и увеличитьhead
соответственно ограничить.
Более удобный подход к решению Шона для мониторинга практически в реальном времени:
while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done
Это обеспечит статичное представление о 20 лучших процессах, которые будут обновляться каждые 1 секунду. Параметр "c" в команде ps выведет имя исполняемого файла процесса, а не всю команду args. Вы можете опустить эту опцию, если вам нужна вся информация о команде. Также добавлен столбец использования памяти%.
Разве Gentoo также не имеет команды top?
machine:~/# top
должен дать вам статистику запуска программ, которые вызывают наибольшую нагрузку.