Цель урока: Научиться правильно читать потребление оперативной памяти, находить процессы-обжоры, понимать природу SWAP и проводить безопасные стресс-тесты с помощью современного инструмента stress-ng.

Часть 1: "Куда делась моя память?" (free -h)

В Windows, если память забита на 90%, компьютер начинает тормозить. В Linux - нет.
Linux живет по принципу: "Свободная память - это бесполезная память". Он старается занять всё свободное место под кэш файлов (чтобы сайт открывался мгновенно, а не читался каждый раз с медленного диска).

Смотрим текущее состояние:

free -h

Как читать вывод (пример):

  1. total: Всего памяти.

  2. used: Реально занято программами.

  3. free: Абсолютно пустая память. Не паникуйте, если тут мало!

  4. buff/cache: Здесь лежит файловый кэш (Page Cache). Если вашим программам срочно понадобится память, Linux мгновенно очистит этот кэш и отдаст память вам.

  5. 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
  1. si (swap in) / so (swap out): Если здесь нули - всё отлично. Если бегут цифры - память кончилась, система "шлифует" диск, постоянно гоняя данные туда-сюда. Это плохо.

  2. wa (IO Wait): Это "Время ожидания". Показывает процент времени, когда процессор ничего не делает, потому что тупо ждет ответа от диска. Если wa высокий - у вас либо медленный диск, либо нехватка памяти (из-за свопинга).

(Нажмите Ctrl+C для выхода).

Часть 4: Кто съел память?

Мы поняли, что памяти мало. Кто виноват?
Используем top с сортировкой по памяти.

  1. Запустите top.

  2. Нажмите Shift + M (обязательно большая M).

  3. Теперь список отсортирован по столбцу %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):

  1. Колонка free резко упадет.

  2. Если у вас мало RAM, начнут расти цифры si / so (пошел свопинг).

  3. Может вырасти wa (процессор ждет диск).

Часть 7: Тюнинг (Swappiness)

Вы можете регулировать, как сильно Linux "любит" уходить в SWAP.
За это отвечает параметр vm.swappiness (от 0 до 100).

  • 60 (по умолчанию) - баланс для десктопа.

  • 1 или 10 - рекомендуемое значение для серверов (особенно баз данных). Мы говорим системе: "Используй RAM до последнего, не трогай диск, пока не прижмет".

Проверить текущее:

cat /proc/sys/vm/swappiness

Изменить на лету:

sysctl vm.swappiness=10

Итоги урока

Теперь вы знаете о памяти больше, чем 80% новичков.

  1. Не бойтесь малого free. Бойтесь малого available.

  2. Смотрите на wa в vmstat. Если процессор ждет диск - возможно, виноват SWAP.

  3. Используйте top -o %MEM. Чтобы знать врага (прожорливый процесс) в лицо.

  4. OOM Killer - это не ошибка, это защитный механизм. Ищите его следы в dmesg.

В Уроке 67 мы разберем дисковую подсистему. Вы узнаем, как найти процесс, который постоянно пишет на диск и замедляет весь сервер, используя утилиту iotop.

Перейти к просмотру - УРОК №67.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи считают это полезным (19 голосов)