О нас Руководства Проекты Контакты
Админка
пожалуйста подождите

Введение

Понимание управления процессами и мониторинга производительности необходимо для поддержания работоспособности систем. Когда приложения начинают тормозить или серверы перестают отвечать, вам нужны инструменты и методы, позволяющие быстро диагностировать проблемы. В этом руководстве рассматриваются практические подходы к мониторингу, устранению неполадок и оптимизации производительности системы 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

KeyAction
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 при низкой пропускной способности = случайный.

  1. Диск выходит из строя? → проверьте dmesg | tail на наличие ошибок.

Быстрый бенчмарк диска:

# Скорость записи (в обход кэша)
dd if=/dev/zero of=testfile bs=1M count=1024 oflag=dsync

Заключение

Эффективное управление процессами и производительностью требует понимания системных метрик и наличия подходящих инструментов. Используйте htop для интерактивного мониторинга, vmstat и iostat для выявления узких мест и знайте сигналы для управления процессами. Старшие инженеры системно изолируют ресурсы (CPU, RAM, Disk, Network), а не гадают наугад. Регулярный мониторинг помогает выявлять проблемы до того, как они станут критическими.

 
 
 
Языки
Темы
Copyright © 1999 — 2026
Зетка Интерактив