top – одна из наиболее распространённых и удобных в своей линейке утилит, предназначенная для мониторинга состояния сервера.
По её имени позже были названы и другие аналогичные продукты – atop, htop, iftop, iotop и многие другие. Цель у всех одна – отобразить текущую нагрузку на весь сервер или отдельные его подсистемы.
В данной статье мы рассмотрим исключительно утилиту top – из-за её простоты, возможностей и, как результат, распространенности. Статья явно неполная – возможностей у программы достаточно много. Позже будет добавлена вторая часть.
Общий вид программы и выводимых ей сведениях немного отличается во FreeBSD и Linux – но в целом они похожи:
Утилита top входит в пакет программ procps. Кроме top в него так же входят такие утилиты как free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, uptime, vmstat, w и watch. Данные для отображения утилиты берут в основном из каталога /proc. Подробнее про этот каталог и файловую систему proc можно прочитать в статье Linux: описание и назначение файловой системы proc и каталога /proc.
Перейдём к рассмотрению выводимых данных.
Самая важная и нужна информация – это первая строка, отображающая Load Avarage (далее – LA):
Данные выводятся в трёх временных промежутка – 1 минута назад, 5 минут и 15 минут.
Как узнать какое значение Load Avarage является нормальным? Тут всё зависит от количества ядер.
Для примера – сервер с CPU у которого 1 ядро:
Показатель LA меньше 1 – самое хорошее значение, нагрузки практически нет;
1-3 – нагрузка в пределах нормы, сервер достаточно нагружен работой – но эта нагрузка в пределах нормы;
3-10 – это уже серьёзная нагрузка, следует обратить внимание на процессы, HDD и прочие параметры;
Нагрузка более 10 – серьёзные проблемы, заметно “торможение” сервера при обработке запросов;
20 и более – очень серьёзные проблемы, доступ к серверу серьёзно затруднён.
Для серверов, у которых количество ядре в процессоре более 1-го – эти значения необходимо увеличить на кол-во ядер в системе.
Так же полезная информация выводится в начале строки с Load Avarages:
Сначала отображается текущее системное время процессора (если у вас время не точное – о синхронизации можно прочитать в статье FreeBSD: синхронизация времени с помощью NTP).
Далее отображается информация о текущих процессах:
running — процессы, выполняющиеся в данный момент;
sleeping — “спящие” процессы, процесс находится в состоянии ожидания запроса или в готовности;
zombie — “зомби”-процесс, дочерний процесс, завершивший свой выполнение, но но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.
Далее выводится информация об использовании процессора:
us% — процент времени, потраченного на выполнение процессов пользователей, для которых не задан приоритет;
sy% — это процент времени, потраченного на выполнение процессов ядра;
ni% — процент времени, потраченного на выполнение процессов с заданных приоритетом;
wa% — это процент времени, потраченного на выполнение операций IO (вводавывода), то есть дисковых операций;
hi% — это процент времени, потраченный на обработку аппаратных прерываний;
si% — процент времени, потраченного на обработку программных прерываний;
st% — процент времени, «украденного» у виртуальной машины гипервизором для каких-либо других задач, к примеру, запуска другой виртуальной машины.
Далее размещается информация о использовании оперативной памяти.
total — это суммарный объем оперативной памяти сервера;
used — это объем использованной памяти;
free — объем свободной памяти;
buffers — объем буфера;
cached — объем кеша операций вводавывода.
Это же касается SWAP-раздела.
Далее – выводится информация о текущих процессах:
PID — числовой идентификатор процесса;
USER — это пользователь, который инициировал запуск процесса;
PR — динамический приоритет процесса;
NI — статический приоритет процесса;
VIRT — объем использования виртуальной памяти (включая весь код, библиотеки и т.д.);
RES — объем использования реальной оперативной памяти;
SHR — объем использованной shared-памяти (эта память может использоваться и другими приложениями);
S — статус процесса (выполняется, ожидает, остановлен и т.д.);
- R (running) – выполняется;
- S (sleeping) – “спящий” процесс;
- Z (zombie) – процесс-“зомби”.
%CPU — процент использования процессорного времен;
%MEM — процент использования реальной оперативной памяти;
TIME — время работы процесса с момента запуска;
COMMAND — имя процесса.