Оптимизация Ubuntu: Настройка swap и параметров памяти
Проблема
Алерт: High swap space usage (less than 50% free) - обычно возникает при отсутствии или неправильной настройке swap.
Диагностика
Проверяем текущее состояние системы:
# Проверить наличие и использование swap free -h # Текущее значение swappiness cat /proc/sys/vm/swappiness # Топ процессов по памяти ps aux --sort=-%mem | head -15
Решение: Создание и настройка swap
Шаг 1: Создание swap файла
# Создать swap файл 2GB sudo fallocate -l 2G /swapfile # Установить права доступа sudo chmod 600 /swapfile # Создать swap sudo mkswap /swapfile # Активировать swap sudo swapon /swapfile # Проверить результат free -h swapon --show
Шаг 2: Добавление в автозагрузку
# Добавить в fstab для автоматической активации при загрузке echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # Проверить что добавилось grep swapfile /etc/fstab
Шаг 3: Оптимизация параметров памяти
# Добавить параметры оптимизации sudo tee -a /etc/sysctl.conf <<EOF vm.swappiness=10 vm.vfs_cache_pressure=50 vm.dirty_ratio=10 vm.dirty_background_ratio=5 EOF # Применить настройки без перезагрузки sudo sysctl -p # Проверить применение параметров cat /proc/sys/vm/swappiness grep "vm.swappiness\|vm.vfs_cache_pressure\|vm.dirty" /etc/sysctl.conf
Параметры оптимизации
| Параметр | Значение | Описание |
|---|---|---|
vm.swappiness | 10 | Система будет использовать swap только при необходимости (по умолчанию 60) |
vm.vfs_cache_pressure | 50 | Баланс между кэшированием файлов и освобождением памяти |
vm.dirty_ratio | 10 | Процент памяти для грязных страниц перед записью на диск |
vm.dirty_background_ratio | 5 | Фоновая запись грязных страниц |
Проверка результата
# Итоговая проверка free -h swapon --show cat /proc/sys/vm/swappiness
Ожидаемый результат:
- Swap 2GB создан и активен
- 100% swap свободен (0B используется)
- swappiness = 10
- Все параметры сохранены для автозагрузки
Дополнительная оптимизация
Ограничение размера журналов
Для систем с малым объемом RAM (менее 2GB):
# Редактировать конфигурацию journald sudo nano /etc/systemd/journald.conf
Раскомментировать и установить:
SystemMaxUse=50M RuntimeMaxUse=50M
# Перезапустить службу sudo systemctl restart systemd-journald
Очистка swap (опционально)
Внимание: Может временно подтормозить систему
# Выгрузить и загрузить swap заново sudo swapoff -a && sudo swapon -a
Мониторинг
# Посмотреть какие процессы используют swap for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | head -15 # Статистика использования памяти vmstat 1 5