.
Причина: swap заполнен на 95-100%. Если сервис продолжает забивать swap при наличии свободной оперативной памяти, применить ниже изложенное. Возможные решения: отключение swap, физическое ограничение сервиса, принудительное завершение любого сервиса который использует много swap (использовать скрипт).
Проверь настройки swapiness — это параметр Linux, который определяет, как агрессивно система использует swap. Если он установлен слишком высоко, система будет чаще использовать swap даже при наличии свободной RAM. Настройку можно посмотреть или изменить с помощью команды:
cat /proc/sys/vm/swappiness
Чем меньше значение swappiness, тем меньше система будет использовать swap. Это, как правило, более безопасная и эффективная стратегия, особенно для серверов, где стабильность работы очень важна. Слишком низкое значение swappiness может привести к тому, что система начнет испытывать нехватку памяти, если нагрузка будет очень высокой. В этом случае система может начать завершать процессы, чтобы освободить память. Оптимальное значение swappiness зависит от конкретной конфигурации системы и нагрузки. Базовый мониторинг позволит отслеживать использование памяти, swap и другие параметры.
swappiness = 100: система будет стремиться максимально быстро освобождать оперативную память, перемещая данные в swap. Даже при наличии свободной оперативной памяти, система будет активно использовать swap.
swappiness = 0: система будет стараться избегать использования swap до последнего момента. Она будет стремиться максимально использовать всю доступную оперативную память, прежде чем начать перемещать данные на диск.
Когда сервер начинает активно использовать swap, это означает, что оперативной памяти может быть недостаточно для текущих задач или ОС перемещает неактивные данные в swap, чтобы освободить оперативную память для более приоритетных процессов. Однако, если swap заполнен до предела, следующие моменты могут вызвать проблемы:
Замедление работы: Доступ к данным в swap-памяти намного медленнее, чем в оперативной памяти, так как swap обычно располагается на жестком диске или SSD. Если swap начинает активно использоваться, производительность может резко снизиться.
Стратегия управления памятью: ОС может продолжать записывать данные в swap, даже если оперативная память ещё свободна. Это может происходить из-за того, что система считает эти данные низкоприоритетными. Если swap заполнен, а система всё равно пытается выгружать данные, это может привести к сбоям в работе процессов, особенно если ресурсы требуют срочного доступа к данным.
Out of Memory (OOM): Если swap и оперативная память не могут удовлетворить запросы памяти, ОС может начать завершать процессы, чтобы освободить ресурсы. Это может привести к аварийным завершениям программ и сервисов.
Зависания: Если система тратит слишком много времени на обмен данными между оперативной памятью и swap (так называемый "thrashing"), она может полностью зависнуть. Это происходит, когда процессор перегружен обработкой ввода-вывода из swap, и системы начинают замедляться или перестают отвечать.
Если оперативная память полностью заполняется:
Swap начнет использоваться (если включен): Система начнет выгружать неактивные страницы данных в swap, чтобы освободить оперативную память для новых процессов или данных.
Out of Memory (OOM): Если swap тоже полностью заполнен, или если своппинга недостаточно, система может начать завершать процессы, которые используют больше всего памяти, чтобы освободить ресурсы для других процессов. Этот процесс называется OOM killer (Out of Memory killer), и он автоматически завершает наименее важные процессы, по мнению системы.
SSH может быть недоступен: Если все ресурсы (RAM и swap) исчерпаны, могут быть проблемы с доступом по SSH, так как системе может не хватить памяти для обработки запросов.
Когда ты выполняешь команду sudo swapoff -a
, произойдет следующее:
Swap будет отключен: Система перестанет использовать swap-файл или раздел, и все данные, которые в данный момент находятся в swap, будут попытаны выгружены обратно в оперативную память.
Никакие процессы не пострадают: Если в оперативной памяти достаточно места, то система успешно переместит данные из swap обратно в RAM. Однако, если оперативной памяти недостаточно (например, память уже заполнена почти полностью), могут возникнуть проблемы с отказом в выделении памяти, и система может начать завершать процессы (через механизм OOM — Out of Memory).
После выполнения команды sudo swapon -a
, swap снова включится, и если система понадобится swap, она начнет его использовать снова. Однако при низком значении swappiness
, система будет использовать swap менее агрессивно.
К сожалению, в Ubuntu (и других дистрибутивах Linux) нет прямого параметра, который бы жёстко ограничивал использование swap-памяти.
Проверь настройки swapiness (60 - по умолчанию).
cat /proc/sys/vm/swappiness
Уменьшить значение, чтобы система реже использовала swap. Использовать команду ниже или вручную отредактировать фаил /proc/sys/vm/swappiness
.
sudo sysctl vm.swappiness=10
sudo sysctl -p
Для внесения изменения на постоянной основе, открой файл /etc/sysctl.conf
для редактирования
sudo nano /etc/sysctl.conf
Добавь строку в конец файла, сохранить и выйти
vm.swappiness=10
Применение новых настроек без перезагрузки
sudo sysctl -p
Если swap по прежнему заполнен на 90%+ выполняем команды “Отключить swap” и “Включить swap” (раздел дополнительные команды).
Дополнительные команды
Отключить swap
sudo swapoff -a
Включить swap
sudo swapon -a
Проверка использования памяти процессами. Если система продолжает активно использовать swap, это может указывать на процессы, которые используют слишком много памяти.
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
Проверь файл swap и его размер.
free -h
Проверка текущей нагрузки на память. Чтобы узнать, какие процессы используют больше всего памяти, и проверить, что может провоцировать использование swap.
ps aux --sort=-%mem | head -n 10