Когда сервер тормозит, первое, что нужно понять: чего не хватает - процессора, памяти, диска или сети, и какой процесс в этом виноват. Для этого в Linux есть набор консольных утилит. Большинство из них уже установлены, а iostat, sar и mpstat входят в пакет sysstat:
sudo apt install sysstat htop # Debian, Ubuntu
sudo dnf install sysstat htop # Fedora, RHEL и родственные
uptime и w: средняя нагрузка

uptime
10:15:32 up 12 days, 3:41, 2 users, load average: 0.85, 1.20, 1.05
Три числа load average - средняя нагрузка за 1, 5 и 15 минут. Это среднее число процессов, которые выполняются или ждут процессора, а также ждут диска в непрерываемом сне. Сравнивайте его с числом ядер (nproc): на 4-ядерном сервере нагрузка около 4 означает полную занятость, заметно выше - очередь. Если первое число больше третьего, нагрузка растёт, если меньше - спадает.
w показывает ту же строку и список вошедших пользователей: откуда подключены, сколько бездействуют и что запустили.
top
top
Вверху - сводка: нагрузка, число задач, загрузка процессора, память. Ниже - процессы, по умолчанию отсортированные по загрузке процессора.
Строка процессора (%Cpu(s)):
- us - пользовательские программы, sy - ядро, ni - процессы с пониженным приоритетом;
- id - простой;
- wa - ожидание ввода-вывода. Высокое значение - процессор свободен, но ждёт диска;
- hi, si - обработка прерываний;
- st - время, отнятое гипервизором. На виртуальной машине высокое значение означает, что физическому серверу не хватает процессора для всех машин.
Столбцы процессов: PID, USER, PR и NI (приоритет), VIRT (виртуальная память), RES (реально занятая физическая память), SHR (разделяемая), S (состояние: R - выполняется, S - спит, D - ждёт ввода-вывода, Z - зомби), %CPU, %MEM, TIME+, COMMAND.
Клавиши внутри top:
- P - сортировать по процессору, M - по памяти, T - по времени работы;
- 1 - показать каждое ядро отдельно;
- c - полная командная строка процессов;
- k - завершить процесс (спросит PID и сигнал);
- r - изменить приоритет (nice);
- u - показать процессы одного пользователя;
- q - выйти.
Однократный снимок для скрипта или отчёта: top -b -n 1 | head -20.
htop
htop - удобный вариант top: цветные шкалы загрузки каждого ядра и памяти, прокрутка, поиск (F3), фильтр (F4), дерево процессов (F5), сортировка выбором столбца (F6), завершение процесса (F9) и изменение приоритета (F7, F8) без ввода PID. Для интерактивной работы обычно удобнее, чем top.
ps
ps выводит снимок процессов, и его удобно комбинировать с другими командами.
ps aux # все процессы, BSD-формат
ps -ef # все процессы, формат с PPID
ps aux --sort=-%mem | head # самые прожорливые по памяти
ps aux --sort=-%cpu | head # по процессору
ps -o pid,ppid,user,%cpu,%mem,etime,cmd -p 1234 # выбранные столбцы для процесса
ps -ejH # дерево процессов
pgrep -a nginx # найти процессы по имени
В ps aux столбец VSZ - виртуальная память, RSS - физическая (в килобайтах), STAT - состояние, START и TIME - когда запущен и сколько процессорного времени израсходовал. Процент процессора в ps - среднее за всё время жизни процесса, а не текущая нагрузка, как в top.
free: память
free -h
total # used free shared buff/cache available
Mem: <всего> <занято> <свободно> ... <кэш> <доступно>
Swap: <всего> <занято> <свободно>
Главный столбец - available: сколько памяти можно отдать программам без использования подкачки. Маленькое значение free само по себе не проблема: Linux занимает свободную память под кэш файлов (buff/cache) и отдаёт её по первому требованию. Тревожный признак - малое available и растущее использование Swap.
vmstat
vmstat 2 5
Пять строк с интервалом 2 секунды. Первая строка - средние значения с момента загрузки, смотрите на следующие.
- r - процессы, ожидающие процессора. Постоянно больше числа ядер - не хватает процессора;
- b - процессы, ожидающие ввода-вывода;
- swpd, free, buff, cache - память в килобайтах;
- si, so - чтение из подкачки и запись в неё. Ненулевые значения постоянно - нехватка памяти;
- bi, bo - чтение с дисков и запись на диски в блоках;
- in, cs - прерывания и переключения контекста в секунду;
- us, sy, id, wa, st - то же, что в
top.
iostat: диски

iostat -x 2
Расширенная статистика по каждому диску каждые 2 секунды. Основные столбцы:
- r/s, w/s - операций чтения и записи в секунду;
- rkB/s, wkB/s - объём чтения и записи;
- r_await, w_await - среднее время выполнения запроса в миллисекундах, включая ожидание в очереди. Рост этих значений - главный признак, что диск не справляется;
- aqu-sz - средняя длина очереди;
- %util - доля времени, когда устройство было занято. Для одиночного жёсткого диска значения около 100% означают предел. У SSD и массивов, которые выполняют много запросов параллельно,
%utilможет быть высоким при запасе производительности, поэтому ориентируйтесь наawait.
Какой процесс нагружает диск, покажут iotop (нужны права root) или pidstat -d 2 из того же пакета sysstat.
mpstat: процессоры по отдельности
mpstat -P ALL 2
Загрузка каждого ядра. Если одно ядро загружено полностью, а остальные простаивают, приложение не умеет работать параллельно или упирается в один поток, и добавление ядер не поможет. Высокий %soft на одном ядре часто связан с обработкой сетевого трафика.
sar: история нагрузки
Все утилиты выше показывают «здесь и сейчас». sar хранит историю, и с ним можно выяснить, что происходило ночью, когда сервер «тормозил».
Сбор данных нужно включить. В Debian и Ubuntu - в файле /etc/default/sysstat установите ENABLED="true", затем:
sudo systemctl enable --now sysstat
В RHEL и родственных сбор включается тем же systemctl enable --now sysstat. Данные пишутся каждые 10 минут в /var/log/sysstat/ (Debian, Ubuntu) или /var/log/sa/ (RHEL).
Просмотр:
sar -u # процессор за сегодня
sar -r # память
sar -b # ввод-вывод
sar -d # по дискам
sar -n DEV # сеть по интерфейсам
sar -q # очередь и средняя нагрузка
sar -u -s 02:00:00 -e 04:00:00 # за интервал времени
sar -u -f /var/log/sysstat/sa15 # за 15-е число месяца
sar -u 2 5 # в реальном времени, как vmstat
pmap: память процесса
pmap -x 1234
Показывает, из чего состоит память процесса: исполняемый файл, библиотеки, куча, стек, отображённые файлы. Столбец RSS - физическая память каждой области, Dirty - изменённые страницы. Итог внизу показывает общий объём. Полезно, когда процесс разрастается и нужно понять, растёт ли куча (вероятная утечка памяти) или подгружаются файлы.
С чего начать, если сервер тормозит
uptime- есть ли вообще нагрузка и растёт ли она.topилиhtop- какой процесс занимает процессор или память, нет ли высокогоwa.free -hиvmstat 2- не уходит ли система в подкачку.iostat -x 2- не упирается ли в диск.sarза нужный период - если проблема была в прошлом.ss -sиss -tanp- если подозрение на сеть: сколько соединений и чьи они.
Для постоянного наблюдения за несколькими серверами с графиками и оповещениями используют системы мониторинга, но эти утилиты остаются основным инструментом, когда нужно разобраться прямо на месте.





а мне htop милее (:
круууууууто, а главное ооооооочень подробно!