Кто ест процессор и память
ps даёт снимок, а %CPU в нём — среднее за всю жизнь процесса. Кто грузит
процессор сейчас, видно в top или pidstat -u 1.
Порядок разбора «сервер тормозит»: процессор, память, диск, ядро и сеть — чем смотреть каждый ресурс.
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 1 печатает строку раз в секунду: очередь задач, память, swap, диск
и процессор. Первая строка — средние с момента загрузки, текущую картину
показывают следующие.
Две строки с машины тренажёра — две разные беды:
| Картина | 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 -P ALL 1 показывает каждый процессор отдельно: %usr, %sys,
%iowait, %steal, %idle. На машине с двумя процессорами средний id
50 % бывает и тогда, когда один занят полностью, а второй стоит. Программа с
одним потоком больше одного процессора не займёт.
sar -u 1 3 показывает процессор сейчас, как mpstat. Главное у sar —
история за прошлые часы, но в Ubuntu её сбор выключен:
Включить сбор: ENABLED="true" в /etc/default/sysstat, затем sudo
systemctl restart sysstat. Дальше sar -u, sar -r (память), sar -d
(диски) покажут сегодняшний день по интервалам.
ps даёт снимок, а %CPU в нём — среднее за всю жизнь процесса. Кто грузит
процессор сейчас, видно в top или pidstat -u 1.
Один файл с временем, нагрузкой, памятью и списком процессов — его можно приложить к заявке или сравнить с таким же снимком позже.
Задачи в состоянии D. Высокий wa и b больше 0 — ждут диск, дальше
iostat -dxs 1 и sudo pidstat -d 1. wa и b по нулям — ждут что-то
кроме устройства; разбор — в load-average.
Без sudo pidstat -d показывает только твои процессы: счётчики
ввода-вывода чужих процессов читает только root. iotop на машине
тренажёра не установлен. Поля iostat и pidstat — в pidstat-iostat.
Ядро держит свободную память под кэш страниц и отдаёт её программам по
требованию. Запас памяти — столбец available в free -h, разбор — в
memory-swap.
Сбор истории выключен: ENABLED="false" в /etc/default/sysstat (раздел
«История: sar» выше). Включённый сбор покажет данные с момента включения —
прошлое не восстановить.
pidstat печатает только процессы, которые что-то делали за интервал. Чужие
процессы в pidstat -d видны только root — запускай с sudo.
R и D, строка %Cpu(s).iostat, pidstat.df и du.Есть неточность? Сообщить об ошибке в статье