Сервер: srv01
Проблема: Linux: High swap space usage (less than 50% free)
Время возникновения: 13:59:12 on 2025.12.15
Severity: Warning
Параметры: Free: 47.65%, total: 2 GB
Характеристики сервера:
Запущенные сервисы:
# Общая информация о памяти и swap free -h # Детальная информация о swap swapon --show # Текущее значение swappiness cat /proc/sys/vm/swappiness # Топ процессов по использованию памяти ps aux --sort=-%mem | head -15 # Использование памяти контейнерами Docker docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}"
Топ потребители памяти:
Итого Docker контейнеры: ~1.2GB
Вывод: 4GB RAM недостаточно для текущей инфраструктуры
# Создаем дополнительный swap файл 4GB sudo dd if=/dev/zero of=/swapfile2 bs=1M count=4096 status=progress # Устанавливаем права доступа sudo chmod 600 /swapfile2 # Инициализируем swap sudo mkswap /swapfile2 # Активируем swap sudo swapon /swapfile2 # Проверяем результат free -h swapon --show
Результат:
Swap: 6.0Gi 1.5Gi 4.5Gi NAME TYPE SIZE USED PRIO /swap.img file 2G 1.5G -2 /swapfile2 file 4G 0B -3
# Добавляем в /etc/fstab для автомонтирования при загрузке echo '/swapfile2 none swap sw 0 0' | sudo tee -a /etc/fstab # Проверяем fstab cat /etc/fstab | grep swap
# Устанавливаем swappiness=10 (оптимально для серверов) # Значение 10 означает, что система будет использовать swap только при острой необходимости sudo sysctl vm.swappiness=10 # Делаем изменение постоянным echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf # Проверяем применение настройки cat /proc/sys/vm/swappiness
Результат: Swappiness изменен с 60 на 10
# Создаём директорию для скриптов mkdir -p /opt/scripts mkdir -p /opt/scripts/logs # Создаём скрипт мониторинга памяти cat > /opt/scripts/check_mem.sh << 'EOF' #!/bin/bash echo "=== Memory Report: $(date) ===" echo "" echo "Memory & Swap:" free -h echo "" echo "Swap details:" swapon --show echo "" echo "Top 10 memory consumers:" ps aux --sort=-%mem | head -11 echo "" echo "Docker containers memory:" docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}" | sort -k3 -rn | head -15 echo "========================================" echo "" EOF # Делаем скрипт исполняемым chmod +x /opt/scripts/check_mem.sh # Тестируем работу скрипта /opt/scripts/check_mem.sh
# Создаём конфигурацию logrotate для хранения логов за 7 дней cat > /etc/logrotate.d/mem_monitor << 'EOF' /opt/scripts/logs/mem_monitor.log { daily rotate 7 compress missingok notifempty create 0644 root root } EOF
Частота мониторинга: каждый час
# Добавляем задачу в cron (каждый час в 0 минут) (crontab -l 2>/dev/null; echo "0 * * * * /opt/scripts/check_mem.sh >> /opt/scripts/logs/mem_monitor.log 2>&1") | crontab - # Проверяем установленные задачи cron crontab -l
Формат cron: 0 * * * *
Где: Минута Час День Месяц ДеньНедели
Примеры других частот:
*/30 * * * * - каждые 30 минут*/15 * * * * - каждые 15 минут0 */2 * * * - каждые 2 часа0 */6 * * * - каждые 6 часов0 2 * * * - раз в день в 02:00# Последние 100 строк лога tail -100 /opt/scripts/logs/mem_monitor.log # Мониторинг в реальном времени tail -f /opt/scripts/logs/mem_monitor.log # Поиск по дате grep "2025.12.16" /opt/scripts/logs/mem_monitor.log # Анализ использования swap grep "Swap:" /opt/scripts/logs/mem_monitor.log | tail -20 # Просмотр архивных логов ls -lh /opt/scripts/logs/ zcat /opt/scripts/logs/mem_monitor.log.1.gz | less
services: chatwoot_sidekiq: environment: - RAILS_MAX_THREADS=5 - SIDEKIQ_CONCURRENCY=5 deploy: resources: limits: memory: 512M
services: zabbix_web: environment: - PHP_FPM_PM=ondemand - PHP_FPM_PM_MAX_CHILDREN=10 deploy: resources: limits: memory: 256M
services: n8n: environment: - NODE_OPTIONS=--max-old-space-size=256 deploy: resources: limits: memory: 512M
Применить для всех PostgreSQL: synapse_db, zabbix_postgres, chatwoot_postgres, evolution_postgres
services: postgres: command: - "postgres" - "-c" - "shared_buffers=64MB" - "-c" - "effective_cache_size=256MB" - "-c" - "maintenance_work_mem=32MB" - "-c" - "work_mem=2MB" - "-c" - "max_connections=50"
caches: global_factor: 0.5 # Снижаем с 1.0 до 0.5
Или через переменные окружения в docker-compose.yml:
services: synapse_app: environment: - SYNAPSE_CACHE_FACTOR=0.5
Триггер Warning (обновленный):
Linux: High swap space usage (less than 25% free){srv01:vfs.swap.size[,pfree]}<25Триггер High (новый):
Linux: Critical swap space usage (less than 10% free){srv01:vfs.swap.size[,pfree]}<10После применения решения:
Текущие показатели:
total used free shared buff/cache available Mem: 3.8Gi 2.1Gi 140Mi 124Mi 2.0Gi 1.7Gi Swap: 6.0Gi 1.5Gi 4.5Gi
<WRAP center round important 60%> 4GB RAM недостаточно для текущей инфраструктуры! </WRAP>
Рекомендуемые параметры сервера:
Краткосрочные меры (выполнено):
Среднесрочные меры:
Долгосрочные меры:
# Быстрая проверка памяти free -h # Проверка swap swapon --show # Текущее значение swappiness cat /proc/sys/vm/swappiness # Запуск скрипта мониторинга вручную /opt/scripts/check_mem.sh # Просмотр последних логов tail -50 /opt/scripts/logs/mem_monitor.log # Топ процессов по памяти ps aux --sort=-%mem | head -15 # Docker контейнеры - использование памяти docker stats --no-stream # Проверка cron задач crontab -l # Логи cron grep CRON /var/log/syslog | tail -20
Дата создания: 2025.12.16
Автор: Nick
Статус: Выполнено
Сервер: srv01