# Зависание сервера

By [OdaNoder](https://paragraph.com/@odanoder-2) · 2024-10-18

---

.

Причина: swap заполнен на 95-100%. Если сервис продолжает забивать swap при наличии свободной оперативной памяти, применить ниже изложенное. Возможные решения: отключение swap, физическое ограничение сервиса, принудительное завершение любого сервиса который использует много swap (использовать скрипт).

Оперативная память (RAM) и фаил подкачки (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, так как системе может не хватить памяти для обработки запросов.

### Очистка swap вручную:

Когда ты выполняешь команду `sudo swapoff -a`, произойдет следующее:

**Swap будет отключен**: Система перестанет использовать swap-файл или раздел, и все данные, которые в данный момент находятся в swap, будут попытаны выгружены обратно в оперативную память.

**Никакие процессы не пострадают**: Если в оперативной памяти достаточно места, то система успешно переместит данные из swap обратно в RAM. Однако, если оперативной памяти недостаточно (например, память уже заполнена почти полностью), могут возникнуть проблемы с отказом в выделении памяти, и система может начать завершать процессы (через механизм OOM — Out of Memory).

После выполнения команды `sudo swapon -a`, swap снова включится, и если система понадобится swap, она начнет его использовать снова. Однако при низком значении `swappiness`, система будет использовать swap менее агрессивно.

### Как ограничить использование swap в Ubuntu:

К сожалению, в 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

---

*Originally published on [OdaNoder](https://paragraph.com/@odanoder-2/HzLUaFx8OPbbLjvlzAaK)*
