Введение
Понимание управления процессами и мониторинга производительности необходимо для поддержания работоспособности систем. Когда приложения начинают тормозить или серверы перестают отвечать, вам нужны инструменты и методы, позволяющие быстро диагностировать проблемы. В этом руководстве рассматриваются практические подходы к мониторингу, устранению неполадок и оптимизации производительности системы Linux.
Мониторинг процессов
Базовые команды
# Список всех процессов
ps aux
# Дерево процессов (отношения родитель—потомок)
ps auxf
pstree -p
# Мониторинг процессов в реальном времени
top
htop # Более удобная для пользователя альтернатива
# Фильтр по пользователю
ps -u username
# Фильтр по имени процесса
ps aux | grep nginx
pgrep nginx
Понимание вывода top/htop
top - 14:32:01 up 45 days, 2:15, 3 users, load average: 0.52, 0.58, 0.59
Tasks: 256 total, 1 running, 255 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 1.2 sy, 0.0 ni, 93.1 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 15842.3 total, 712.3 free, 7256.4 used, 7873.6 buff/cache
MiB Swap: 2048.0 total, 2040.0 free, 8.0 used. 8114.1 avail Mem
Ключевые метрики:
- load average: нагрузка CPU за 1/5/15 минут. Сравнивайте с количеством CPU.
- us: время CPU в пользовательском пространстве.
- sy: время CPU в системе/ядре.
- id: время простоя CPU.
- wa: ожидание I/O.
- buff/cache: память, используемая под кэширование (при необходимости может быть освобождена).
Горячие клавиши htop
| Key | Action |
|---|
| F6 | Сортировать по столбцу |
| F9 | Завершить процесс |
| F4 | Фильтровать по имени |
| t | Древовидный вид |
| H | Скрыть пользовательские потоки |
| Space | Пометить процесс |
Управление памятью
Использование памяти
# Сводка по памяти
free -h
# Подробная информация о памяти
cat /proc/meminfo
# Память по процессам
ps aux --sort=-%mem | head -20
# Подробная карта памяти для процесса
pmap <pid>
Понимание памяти
total used free shared buff/cache available
Mem: 15Gi 7.1Gi 696Mi 416Mi 7.7Gi 7.9Gi
Swap: 2.0Gi 8.0Mi 2.0Gi
- available > free, потому что buff/cache может быть освобождён.
- Высокое buff/cache — это нормально и хорошо (кэширование чтения с диска).
- Следите за available memory, а не за free.
Поиск утечек памяти
# Мониторинг памяти процесса во времени
while true; do
ps -o pid,vsz,rss,comm -p $(pgrep myapp)
sleep 60
done >> /var/log/memory-monitor.log
# Проверить, продолжает ли расти потребление памяти процессом
watch -n 5 'ps -o pid,rss,command -p $(pgrep myapp)'
Управление CPU
Использование CPU по процессам
# Основные потребители CPU
ps aux --sort=-%cpu | head -20
# Использование CPU по ядрам
mpstat -P ALL 1
# Мониторинг CPU в реальном времени
htop
# Нажмите F2 → Display options → отметьте "Detailed CPU time"
Выявление узких мест по CPU
# Проверить процессы, ограниченные CPU
top
# Ищите процессы с высоким %CPU
# Проверить ожидание I/O
vmstat 1
# Высокий wa (wait) указывает на узкое место по I/O, а не по CPU
# strace процесса для отладки
strace -c -p <pid> # Статистика системных вызовов
Мониторинг дискового I/O
I/O в реальном времени
# I/O по процессам
iotop
iotop -oP # Только процессы, выполняющие I/O
# Активность диска
iostat -xz 1
# Время ожидания I/O
vmstat 1
# Следите за столбцом 'wa'
Понимание iostat
iostat -xz 1
Device r/s w/s rMB/s wMB/s %util
sda 45.00 120.00 1.80 48.00 85.00
- %util > 80%: диск становится узким местом.
- r/s, w/s: чтения и записи в секунду.
- await: среднее время ожидания (мс) — высокое значение = проблема.
Поиск больших файлов
# Найти файлы больше 1 GB
find /var -type f -size +1G
# Использование диска по каталогам
du -sh /*
du -sh /var/*
# Интерактивный анализ использования диска
ncdu /var
Управление процессами
Сигналы
# Корректное завершение (SIGTERM)
kill <pid>
kill -15 <pid>
# Принудительное завершение (SIGKILL)
kill -9 <pid>
# Завершение по имени
pkill nginx
killall nginx
# Отправить HUP (перезагрузка конфигурации)
kill -HUP <pid>
# Распространённые сигналы:
# SIGTERM (15): корректное завершение
# SIGKILL (9): принудительное завершение (не может быть перехвачен)
# SIGHUP (1): разрыв/перезагрузка
# SIGSTOP (19): приостановить процесс
# SIGCONT (18): возобновить процесс
Приоритет процесса
# Запуск с более низким приоритетом (nicer)
nice -n 10 ./long-running-script.sh
# Изменить приоритет выполняющегося процесса
renice -n 10 -p <pid>
# Диапазон приоритета: -20 (самый высокий) до 19 (самый низкий)
# Только root может задавать отрицательные значения nice
Фоновые процессы
# Запустить в фоне
./script.sh &
# Перевести текущий процесс в фон
Ctrl+Z # Приостановить
bg # Возобновить в фоне
# Вернуть на передний план
fg
# Список фоновых заданий
jobs
# Продолжать работу после выхода из системы
nohup ./script.sh &
# Вывод записывается в nohup.out
# Или используйте disown
./script.sh &
disown %1
Лимиты системных ресурсов
Просмотр лимитов
# Лимиты текущей оболочки
ulimit -a
# Лимиты процесса
cat /proc/<pid>/limits
Установка лимитов
# Временно (текущая сессия)
ulimit -n 65535 # Максимум открытых файлов
# Постоянно: /etc/security/limits.conf
# <user> <type> <item> <value>
www-data soft nofile 65535
www-data hard nofile 65535
* soft nproc 4096
Инструменты мониторинга
vmstat — статистика виртуальной памяти
vmstat 1
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 0 0 712340 125612 7935460 0 0 1 45 102 234 5 1 93 1 0
- r: выполняющиеся процессы (> CPU = перегрузка).
- b: заблокированные процессы (ожидают I/O).
- si/so: swap in/out (должно быть 0).
- bi/bo: блочный I/O.
sar — System Activity Reporter
# Установите sysstat для sar
sudo apt install sysstat
# История CPU
sar -u
# История памяти
sar -r
# История дискового I/O
sar -d
# История сети
sar -n DEV
dstat — комплексная статистика
# Установка
sudo apt install dstat
# Мониторинг «всё в одном»
dstat -cdngy
# CPU, disk, network, paging, system
Рабочие процессы устранения неполадок
Высокая загрузка CPU
# 1. Определить процесс
top -c
# Зафиксировать PID процесса с высокой загрузкой CPU
# 2. Проверить, чем он занят
strace -p <pid> 2>&1 | head -50
# 3. Проверить, использует ли он все ядра
mpstat -P ALL 1
# 4. При необходимости выполнить профилирование (для ваших приложений)
perf top -p <pid>
Высокое потребление памяти
# 1. Проверить общую память
free -h
# 2. Найти основных потребителей памяти
ps aux --sort=-%mem | head -10
# 3. Проверить утечки памяти
pmap <pid> | tail -1
# 4. Очистить кэши (если необходимо, обычно нет)
sync; echo 3 > /proc/sys/vm/drop_caches
Система не отвечает
# 1. Проверить load average
uptime
# 2. Проверить ожидание I/O
vmstat 1
# 3. Проверить нехватку памяти (out of memory)
dmesg | tail -50 | grep -i "out of memory"
# 4. Проверить использование swap
free -h
swapon --show
# 5. Проверить свободное место на диске
df -h
Логирование и сохранение
Сделать логи journald постоянными
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Просмотр логов прошлых загрузок
# Список загрузок
journalctl --list-boots
# Просмотреть конкретную загрузку
journalctl -b -1 # Предыдущая загрузка
journalctl -b -2 # Загрузка двумя ранее
# Просмотреть предупреждения и ошибки
journalctl -p warning
journalctl -b -1 -p err
Подход старшего инженера к устранению неполадок: первые 60 секунд
Когда вы подключаетесь по SSH к «горящему» серверу, выполните эти команды по порядку:
# 1. Load averages — растёт или снижается?
uptime
# 2. Ошибки ядра — OOM kills, ошибки дискового I/O?
dmesg | tail
# 3. Общесистемный обзор — процессы, память, swap, CPU
vmstat 1
# 4. Баланс CPU по ядрам — одно ядро упирается в потолок?
mpstat -P ALL 1
# 5. Какой процесс создаёт нагрузку?
pidstat 1
# 6. Задержка и насыщение диска
iostat -xz 1
# 7. Использование памяти и кэш
free -m
# 8. Пропускная способность сети
sar -n DEV 1
# 9. Сбои/повторные передачи TCP-соединений
sar -n TCP,ETCP 1
# 10. Классический обзор
top
Быстрая диагностика: высокий CPU, но низкое пользовательское время?
Если CPU высокий, но us (пользовательское пространство) низкий:
- Высокий
sy (system): слишком много переключений контекста. Проверьте, нет ли слишком большого числа потоков/процессов. - Высокий
wa (wait): узкое место — дисковый I/O, а не CPU. - Высокий
in (interrupts): прерывания сетевой карты или аппаратные прерывания.
Аварийная ситуация с файловыми дескрипторами
Сбой production из-за "Too many open files" (EMFILE). Быстрая проверка и исправление:
# Проверить текущие лимиты
ulimit -Sn # Soft limit (можно повысить)
ulimit -Hn # Hard limit (потолок)
# Для конкретного процесса
cat /proc/<pid>/limits | grep "open files"
# Подсчитать текущее число открытых файлов
ls /proc/<pid>/fd | wc -l
Постоянное исправление в /etc/security/limits.conf:
* soft nofile 200000
* hard nofile 500000
Проверка насыщения дискового I/O
Если iostat -xz 1 показывает %util > 80%, диск насыщен.
Быстрые вопросы: 1. Кто пишет? → iotop 2. Это случайный или последовательный доступ? → высокий IOPS при низкой пропускной способности = случайный.
- Диск выходит из строя? → проверьте
dmesg | tail на наличие ошибок.
Быстрый бенчмарк диска:
# Скорость записи (в обход кэша)
dd if=/dev/zero of=testfile bs=1M count=1024 oflag=dsync
Заключение
Эффективное управление процессами и производительностью требует понимания системных метрик и наличия подходящих инструментов. Используйте htop для интерактивного мониторинга, vmstat и iostat для выявления узких мест и знайте сигналы для управления процессами. Старшие инженеры системно изолируют ресурсы (CPU, RAM, Disk, Network), а не гадают наугад. Регулярный мониторинг помогает выявлять проблемы до того, как они станут критическими.