Что такое Load Average? Почему свободной памяти почти нет, но система работает? Давайте разберёмся с основами Linux, которые должен знать каждый DevOps.

Load Average - пульс вашей системы

Что это?

BASH
$ uptime
14:22:01 up 45 days,  3:14,  2 users,  load average: 0.45, 0.67, 0.82
Нажмите, чтобы развернуть и увидеть больше

Три цифры - это средняя нагрузка за 1, 5 и 15 минут.

Как читать?

Пример из жизни

Представьте кассы в магазине:

Что делать?

BASH
# Проверить количество ядер
nproc
# или
cat /proc/cpuinfo | grep processor | wc -l

# Правило большого пальца:
# Load Average < количество ядер = OK
# Load Average ≈ количество ядер = напряжённо
# Load Average > количество ядер × 2 = проблемы
Нажмите, чтобы развернуть и увидеть больше

Процессы - кто что делает

Состояния процессов

BASH
$ ps aux
USER  PID %CPU %MEM    VSZ   RSS TTY STAT START TIME COMMAND
root    1  0.0  0.1 225832  9516 ?   Ss   Jun10 2:15 /sbin/init
Нажмите, чтобы развернуть и увидеть больше

STAT - состояние процесса:

Приоритет и “вежливость” (nice)

BASH
# Запустить с низким приоритетом
nice -n 19 ./backup.sh

# Изменить приоритет работающего процесса
renice -n 10 -p 1234

# -20 = максимальный приоритет (грубиян)
#   0 = обычный
# +19 = минимальный приоритет (вежливый)
Нажмите, чтобы развернуть и увидеть больше

Сигналы - как общаться с процессами

BASH
# Вежливо попросить завершиться
kill -TERM 1234  # или просто kill 1234

# Приказать завершиться (не игнорируется)
kill -KILL 1234  # или kill -9 1234

# Перечитать конфиг (для демонов)
kill -HUP 1234

# Посмотреть все сигналы
kill -l
Нажмите, чтобы развернуть и увидеть больше

Память - почему её всегда мало?

Разбираемся с free

BASH
$ free -h
              total    used    free  shared  buff/cache  available
Mem:           15Gi    3Gi   256Mi    1Gi        12Gi       11Gi
Swap:           0B      0B      0B
Нажмите, чтобы развернуть и увидеть больше

Что значат колонки:

Почему free показывает мало свободной памяти?

Linux кэширует всё что можно! Свободная RAM = потраченная RAM.

BASH
# Очистить кэш (редко нужно)
echo 3 > /proc/sys/vm/drop_caches

# Но лучше доверять Linux
Нажмите, чтобы развернуть и увидеть больше

Swap - когда RAM кончилась

BASH
# Проверить использование swap
swapon -s
free -h

# Кто использует swap?
for file in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file 
done | sort -k 2 -n | tail -20
Нажмите, чтобы развернуть и увидеть больше

OOM Killer - серийный убийца

Когда память кончается, Linux начинает убивать процессы.

BASH
# Проверить, кого убили
dmesg | grep -i "killed process"
journalctl -u <service> | grep -i oom

# Защитить важный процесс
echo -1000 > /proc/<PID>/oom_score_adj
Нажмите, чтобы развернуть и увидеть больше

Практические примеры

1. Сервер тормозит - с чего начать?

BASH
# Шаг 1: Load Average
uptime

# Шаг 2: Кто ест CPU?
top
# Нажать 'P' - сортировка по CPU
# Нажать 'M' - сортировка по памяти

# Шаг 3: Проблемы с диском?
iostat -x 1
# Смотрим %util - если близко к 100%, диск перегружен

# Шаг 4: Память
free -h
# Если available мало - проблемы с памятью
Нажмите, чтобы развернуть и увидеть больше

2. Найти процесс-вредитель

BASH
# По имени
pgrep -f "python script.py"

# По порту
lsof -i :8080
ss -tlnp | grep :8080

# По использованию файла
lsof /var/log/app.log
Нажмите, чтобы развернуть и увидеть больше

3. Мониторинг в реальном времени

BASH
# htop - красивый и удобный
htop

# iotop - кто нагружает диск
iotop

# nethogs - кто ест трафик
nethogs
Нажмите, чтобы развернуть и увидеть больше

Шпаргалка по командам

Процессы

BASH
ps aux               # все процессы
ps -ef               # все процессы (System V)
ps aux | grep nginx  # найти процесс
pgrep nginx          # найти PID по имени
pidof nginx          # то же самое
pstree               # дерево процессов
Нажмите, чтобы развернуть и увидеть больше

Память

BASH
free -h              # использование памяти
vmstat 1             # статистика в реальном времени
cat /proc/meminfo    # детальная информация
smem                 # память по процессам
Нажмите, чтобы развернуть и увидеть больше

CPU

BASH
top                  # общий мониторинг
htop                 # то же, но красивее
mpstat 1             # статистика по ядрам
sar -u 1 5          # история CPU
Нажмите, чтобы развернуть и увидеть больше

Типичные проблемы и решения

Load Average высокий, но CPU свободен

Причина: процессы ждут диск (состояние D).

BASH
# Проверить
ps aux | awk '$8 ~ /D/ { print $0 }'

# Найти проблемный диск
iostat -x 1
Нажмите, чтобы развернуть и увидеть больше

Swap используется при свободной RAM

Причина: swappiness слишком высокий.

BASH
# Проверить
cat /proc/sys/vm/swappiness

# Уменьшить (временно)
echo 10 > /proc/sys/vm/swappiness

# Навсегда
echo "vm.swappiness=10" >> /etc/sysctl.conf
Нажмите, чтобы развернуть и увидеть больше

Zombie процессы

Причина: родительский процесс не забрал статус.

BASH
# Найти
ps aux | grep defunct

# Убить родителя (zombie умрёт сам)
kill -TERM <parent_pid>
Нажмите, чтобы развернуть и увидеть больше

Золотые правила

  1. Не паникуйте при Load Average > ядер - посмотрите тренд
  2. Мало free памяти - это нормально - смотрите available
  3. Не используйте kill -9 сразу - сначала kill -TERM
  4. iostat важнее top при проблемах с производительностью
  5. Логи расскажут больше чем метрики - проверяйте dmesg и journalctl

Авторские права

Автор: Vasiliy Fakunin

Ссылка: https://notes.melancholic.tech/posts/load-average-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%8B-%D0%B8-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D0%BC%D0%B8-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D0%BC%D0%B8/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша