Вопрос или проблема
Пытаясь найти причину высокого среднего загрузки системы ночью (что, похоже, не связано с logrotate), я установил atop, чтобы записывать сырый файл с определенным интервалом. При чтении файла кажется, что список процессов не обновляется, могу ли я как-то перемещаться между образцами, чтобы увидеть, что выделяется, и дополнительно отсортировать по любому столбцу (например, использованию ЦП)?
Что касается вашего второго вопроса, список, напечатанный atop
, по умолчанию отсортирован по использованию ЦП. Если вы хотите отсортировать его по другому параметру (например, по потреблению резидентной памяти), вы можете это сделать (man atop
расскажет вам как для интерактивного режима, так и для режима работы с сырыми файлами).
Что касается вашего первого вопроса, этот небольшой скрипт AWK может помочь:
BEGIN {
printline = "false"
}
{
if (printline == "true") { print($0); printline = "false" }
if ($1 == "PID") { printline = "true" }
}
Запустите его как awk -f myScript.awk logFromAtop.log
, и он выдаст верхнюю строку atop для каждого интервала; вам, вероятно, будет легко увидеть несколько выделяющихся строк. (Скрипт просто ищет строки, начинающиеся с PID, и печатает следующие.)
В зависимости от вашей версии atop, она может выдавать ASCII или бинарный сырый файл в зависимости от флагов, которые вы используете при запуске. В последнем случае вы можете получить ASCII-версию с помощью atop
сам по себе, например, atop -r binary.raw > logFromAtop.log
.
Вы никогда не узнаете, какой процесс вызывает высокие средние нагрузки, глядя на процент использования ЦП. Средняя нагрузка зависит от того, работает ли процесс (R) или ожидает ввода-вывода (D). Поэтому фактическая опция, которую вы должны использовать, это s
:
s
Показать характеристики планирования.Для каждого процесса показываются следующие поля в случае ширины окна в 80 позиций: идентификатор процесса, количество потоков в состоянии
‘работает’ (R), количество потоков в состоянии ‘прерываемого сна’
(S), количество потоков в состоянии ‘непрерываемого сна’ (D),
политика планирования (обычное распределение времени, круговая реальная время, реальное
fifo), значение nice, приоритет, реальный приоритет, текущий процессор,
статус, код выхода, состояние, процент занятости для выбранного
ресурса и имя процесса.Когда доступно более 80 позиций, добавляется другая информация.
Просто измените вашу конфигурацию, чтобы показывать характеристики планирования, и вы найдете виновника.
Запустите atop
с аргументом -r
, за которым следует ваш файл журнала :
Затем, пока atop
работает, вы можете использовать ctrl+F, чтобы увидеть следующую страницу, или ctrl+B, чтобы увидеть предыдущую.
Ответ или решение
Для диагностики высокого уровня нагрузки на систему с использованием утилиты atop
, необходимо учитывать несколько аспектов, как в анализе данных, так и в конфигурации самой утилиты.
Анализ данных с использованием atop
-
Извлечение данных из файла: Чтобы просмотреть данные, записанные в файл, используйте команду:
atop -r имя_файла
В процессе просмотра данных, вы можете перемещаться между образцами с помощью сочетаний клавиш:
Ctrl + F
— чтобы перейти к следующему образцуCtrl + B
— чтобы вернуться к предыдущему образцу
-
Сортировка по столбцам:
По умолчаниюatop
сортирует процессы по использованию CPU. Чтобы отсортировать их по другим параметрам, таким как потребление памяти, воспользуйтесь следующими командами:- Для сортировки по конкретным столбцам в интерактивном режиме утилиты, введите
?
, чтобы увидеть помощь по возможным клавишам сортировки. - Для получения данных в виде ASCII из бинарного файла:
atop -r бинарный_файл > лог_файл.txt
- Для сортировки по конкретным столбцам в интерактивном режиме утилиты, введите
Устранение причины высокого уровня нагрузки
-
Понимание нагрузки:
Как вы правильно заметили, высокий уровень нагрузки может быть вызван не только процессами, использующими CPU, но и теми, которые ожидают ввода-вывода. Чтобы более точно оценить состояние процессов, переключитесь в режим отображения характеристик планирования (используя опциюs
):- Выполните эту команду в интерактивном режиме
atop
. Это позволит вам увидеть состояние потоков для каждого процесса, включая количество потоков в состояниях ‘running’ (бегущие, R) и ‘uninterruptible sleeping’ (ожидающие ввода-вывода, D).
- Выполните эту команду в интерактивном режиме
-
Использование AWK для фильтрации данных:
Для получения первых строк с каждой выборкой, которые отображают информацию о процессах, можно использовать следующий скрипт AWK:BEGIN { printline = "false" } { if (printline == "true") { print($0); printline = "false" } if ($1 == "PID") { printline = "true" } }
Запустите скрипт с помощью команды:
awk -f myScript.awk лог_файл.txt
Заключение
Объединив вышеуказанные подходы, вы сможете более эффективно исследовать, какие процессы оказывают наибольшее влияние на ваш уровень нагрузки. В итоге это поможет вам выяснить причину проблемы, а также оптимизировать работу вашей системы. Не забывайте периодически проверять документацию (например, man atop
), чтобы быть в курсе всех возможностей утилиты.