С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Мониторинг системы: с чего начать, когда сервер тормозит

7 мин Ubuntu 24.04 · procps 4.0 · sysstat 12.6

Порядок разбора «сервер тормозит»: процессор, память, диск, ядро и сеть — чем смотреть каждый ресурс.

Шпаргалка

8 команд Версия для печати
  • uptime; nproc load и число процессоров
  • vmstat 1 5 очередь, память, swap, диск, CPU
  • top процессы: P — по CPU, M — по памяти
  • free -h память: смотри available
  • iostat -dxs 1 3 диски: await, aqu-sz, %util
  • sudo pidstat -d 1 3 кто читает и пишет диск
  • sudo journalctl -k -p err -b ошибки ядра этой загрузки
  • mpstat -P ALL 1 3 загрузка каждого процессора

Обзор

«Сервер тормозит» значит, что какой-то ресурс кончился: процессор, память, диск или сеть. Сначала одной-двумя командами найди, какой именно, потом разбирай его подробно.

vmstat входит в пакет procps, iostat, pidstat, mpstat и sar — в пакет sysstat. На машине тренажёра есть оба.

Порядок разбора

Ресурс Команда Признак беды
процессор uptime, top load выше nproc, id около 0
память free -h, vmstat 1 мало available, растут si и so, в журнале OOM
диск vmstat 1, iostat -dxs 1 высокий wa, b больше 0, %util под 100
ядро sudo journalctl -k -p err -b ошибки ФС и диска, OOM, зависшие задачи
сеть ss -s, sar -n DEV 1 очереди и ошибки на интерфейсе

Подробно о каждом ресурсе: очередь к процессору и состояние D — load-average, память и swap — memory-swap, OOM — oom-killer, диски и процессы на них — pidstat-iostat, журнал ядра — journalctl, сокеты и соединения — ss.

vmstat

vmstat 1 печатает строку раз в секунду: очередь задач, память, swap, диск и процессор. Первая строка — средние с момента загрузки, текущую картину показывают следующие.

bash
vmstat 1 5              # 5 строк с интервалом в секунду
vmstat -w 1             # широкие столбцы для больших чисел
vmstat -s               # сводка счётчиков памяти и CPU

Две строки с машины тренажёра — две разные беды:

Картина r b free cache si so bi bo us sy id wa
две задачи делят один CPU 2 0 19180 289936 0 0 0 8 100 0 0 0
dd пишет на диск 0 1 45064 268508 0 0 0 32716 1 18 0 81
Столбец Что значит
r задачи в состоянии R: работают и ждут процессор
b задачи, которые ждут ввод-вывод диска
swpd занято в swap, КиБ
free, buff, cache свободная память, буферы и кэш страниц, КиБ
si, so чтение из swap и запись в swap, КиБ/с
bi, bo чтение с дисков и запись на диски, КиБ/с
in, cs прерывания и переключения задач в секунду
us, sy, id, wa, st доли времени процессора, как в top
gu время гостевых ВМ, если машина сама гипервизор

b и wa считают только ожидание устройства. Процессы, которые ждут замороженную файловую систему, видны в load average, а в b их нет (см. load-average).

mpstat

mpstat -P ALL 1 показывает каждый процессор отдельно: %usr, %sys, %iowait, %steal, %idle. На машине с двумя процессорами средний id 50 % бывает и тогда, когда один занят полностью, а второй стоит. Программа с одним потоком больше одного процессора не займёт.

История: sar

sar -u 1 3 показывает процессор сейчас, как mpstat. Главное у sar — история за прошлые часы, но в Ubuntu её сбор выключен:

text
student@ubuntu:~$ grep ENABLED /etc/default/sysstat
ENABLED="false"
student@ubuntu:~$ sar
Linux 6.8.0-124-generic (ubuntu)    10/20/26    _x86_64_    (1 CPU)

23:50:55     LINUX RESTART  (1 CPU)

Включить сбор: ENABLED="true" в /etc/default/sysstat, затем sudo systemctl restart sysstat. Дальше sar -u, sar -r (память), sar -d (диски) покажут сегодняшний день по интервалам.

Рецепты

2

Кто ест процессор и память

bash
ps -eo pid,ni,pcpu,comm --sort=-pcpu | head -5   # по CPU
ps -eo pid,rss,comm --sort=-rss | head -5        # по памяти, КиБ
pidstat -u 1 3          # %CPU по процессам в динамике
pidstat -r 1 3          # память и page faults по процессам

ps даёт снимок, а %CPU в нём — среднее за всю жизнь процесса. Кто грузит процессор сейчас, видно в top или pidstat -u 1.

Снимок для отчёта

bash
{ date; uptime; free -h; vmstat 1 3; top -bn1 | head -15; } \
  > ~/snapshot.txt

Один файл с временем, нагрузкой, памятью и списком процессов — его можно приложить к заявке или сравнить с таким же снимком позже.

Неполадки

5

Высокий load, процессор простаивает

Задачи в состоянии D. Высокий wa и b больше 0 — ждут диск, дальше iostat -dxs 1 и sudo pidstat -d 1. wa и b по нулям — ждут что-то кроме устройства; разбор — в load-average.

Высокий wa: кто пишет на диск

bash
sudo pidstat -d 1 3     # kB_rd/s и kB_wr/s по процессам

Без sudo pidstat -d показывает только твои процессы: счётчики ввода-вывода чужих процессов читает только root. iotop на машине тренажёра не установлен. Поля iostat и pidstat — в pidstat-iostat.

free почти ноль

Ядро держит свободную память под кэш страниц и отдаёт её программам по требованию. Запас памяти — столбец available в free -h, разбор — в memory-swap.

sar печатает только LINUX RESTART

Сбор истории выключен: ENABLED="false" в /etc/default/sysstat (раздел «История: sar» выше). Включённый сбор покажет данные с момента включения — прошлое не восстановить.

pidstat ничего не показывает

pidstat печатает только процессы, которые что-то делали за интервал. Чужие процессы в pidstat -d видны только root — запускай с sudo.

См. также

  • load-average — load, состояния R и D, строка %Cpu(s).
  • pidstat-iostat — диски и процессы: iostat, pidstat.
  • oom-killer — процесс завершён при нехватке памяти.
  • top — процессы в одном окне.
  • memory-swap — память, кэш и swap.
  • processes — состояния, сигналы, приоритет.
  • disk-usage — место на диске: df и du.
  • journalctl — журнал служб и ядра.
  • ss — сокеты и соединения.
Загрузка…