
Цель урока: Научиться правильно читать потребление оперативной памяти, находить процессы-обжоры, понимать природу SWAP и проводить безопасные стресс-тесты с помощью современного инструмента stress-ng.
Часть 1: "Куда делась моя память?" (free -h)
В Windows, если память забита на 90%, компьютер начинает тормозить. В Linux - нет.
Linux живет по принципу: "Свободная память - это бесполезная память". Он старается занять всё свободное место под кэш файлов (чтобы сайт открывался мгновенно, а не читался каждый раз с медленного диска).
Смотрим текущее состояние:
free -h
Как читать вывод (пример):
-
total: Всего памяти.
-
used: Реально занято программами.
-
free: Абсолютно пустая память. Не паникуйте, если тут мало!
-
buff/cache: Здесь лежит файловый кэш (Page Cache). Если вашим программам срочно понадобится память, Linux мгновенно очистит этот кэш и отдаст память вам.
-
available: Самая честная колонка. Это сумма free + та часть buff/cache, которую можно быстро освободить. Смотрите только сюда.
Часть 2: SWAP (Файл подкачки)
SWAP - это "аварийная память" на жестком диске. Когда RAM кончается совсем, Linux сбрасывает редко используемые данные на диск.
Посмотреть статус:
swapon --show
Важное предупреждение:
-
Если у вас HDD (старый жесткий диск): Активное использование SWAP убьет производительность. Сервер встанет.
-
Если у вас NVMe SSD: Это будет работать терпимо, но всё равно в 10-100 раз медленнее, чем RAM.
Часть 3: Глубокая диагностика (vmstat)
Команда free - это просто фото. А нам нужно видео. Тормозит ли сервер прямо сейчас из-за памяти?
Запускаем vmstat (обновление каждую 1 секунду):
vmstat 1
Смотрим на эти три колонки:
---swap-- ... --cpu--
si so ... wa
0 0 ... 0
-
si (swap in) / so (swap out): Если здесь нули - всё отлично. Если бегут цифры - память кончилась, система "шлифует" диск, постоянно гоняя данные туда-сюда. Это плохо.
-
wa (IO Wait): Это "Время ожидания". Показывает процент времени, когда процессор ничего не делает, потому что тупо ждет ответа от диска. Если wa высокий - у вас либо медленный диск, либо нехватка памяти (из-за свопинга).
(Нажмите Ctrl+C для выхода).
Часть 4: Кто съел память?
Мы поняли, что памяти мало. Кто виноват?
Используем top с сортировкой по памяти.
-
Запустите top.
-
Нажмите Shift + M (обязательно большая M).
-
Теперь список отсортирован по столбцу %MEM. Самые прожорливые - наверху.

Или одной командой без входа в top:
ps aux --sort=-%mem | head -n 6
(Покажет топ-5 процессов-обжор).
Часть 5: OOM Killer (Терминатор)
Что будет, если память кончится, а SWAP тоже забьется? Система не зависнет.
Придет OOM Killer (Out Of Memory Killer).
Он выберет самый "жирный" процесс (обычно MySQL или Java) и пристрелит его, чтобы спасти ядро.
Как узнать, приходил ли убийца?
Если ваш сайт или база данных внезапно "упали" без причин, проверьте "криминальную хронику" ядра:
dmesg | grep -i "killed process"
Пример страшного лога:
Out of memory: Killed process 1234 (mysqld) total-vm:2048000kB, anon-rss:1024000kB
Это значит: "Памяти не было, я убил MySQL, чтобы выжить".
Часть 6: Практика. Стресс-тест (stress-ng)
Давайте искусственно создадим нехватку памяти, чтобы увидеть это вживую.
Мы будем использовать stress-ng - современный инструмент для нагрузочного тестирования (старый stress уже устарел).
Шаг 1: Установка
apt update
apt install -y stress-ng
Шаг 2: Запуск нагрузки
Откройте второе окно терминала и запустите там vmstat 1, чтобы следить за показателями.
В первом окне запускаем тест:
Мы попросим запустить 2 "рабочих", которые попытаются откусить по 512 Мб памяти каждый (итого 1 Гб).
stress-ng --vm 2 --vm-bytes 512M --timeout 30s
Что наблюдать во втором окне (vmstat):
-
Колонка free резко упадет.
-
Если у вас мало RAM, начнут расти цифры si / so (пошел свопинг).
-
Может вырасти wa (процессор ждет диск).
Часть 7: Тюнинг (Swappiness)
Вы можете регулировать, как сильно Linux "любит" уходить в SWAP.
За это отвечает параметр vm.swappiness (от 0 до 100).
-
60 (по умолчанию) - баланс для десктопа.
-
1 или 10 - рекомендуемое значение для серверов (особенно баз данных). Мы говорим системе: "Используй RAM до последнего, не трогай диск, пока не прижмет".
Проверить текущее:
cat /proc/sys/vm/swappiness
Изменить на лету:
sysctl vm.swappiness=10
Итоги урока
Теперь вы знаете о памяти больше, чем 80% новичков.
-
Не бойтесь малого free. Бойтесь малого available.
-
Смотрите на wa в vmstat. Если процессор ждет диск - возможно, виноват SWAP.
-
Используйте top -o %MEM. Чтобы знать врага (прожорливый процесс) в лицо.
-
OOM Killer - это не ошибка, это защитный механизм. Ищите его следы в dmesg.
В Уроке 67 мы разберем дисковую подсистему. Вы узнаем, как найти процесс, который постоянно пишет на диск и замедляет весь сервер, используя утилиту iotop.
Перейти к просмотру - УРОК №67.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com


