Как выполнить тюнинг (tuning) производительности в Linux?

«Как выполнить тюнинг (tuning) производительности в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тюнинг Linux — это итеративный процесс подбора параметров под конкретную нагрузку. Я начинаю с профилей tuned, а затем точечно настраиваю через sysctl.

1. Использование tuned (автоматизированный подход):

# Установка и запуск службы (на примере RHEL/CentOS/Fedora)
sudo yum install -y tuned
sudo systemctl enable --now tuned

# Просмотр доступных профилей
sudo tuned-adm list

# Активация профиля, например, для веб-сервера с низкой задержкой
sudo tuned-adm profile latency-performance

# Для виртуализированных гостевых машин часто используется
sudo tuned-adm profile virtual-guest

2. Ручная настройка через sysctl (для точного контроля): Ключевые параметры, которые я часто корректирую для серверов:

  • Сетевой стек (для высоконагруженных сетевых сервисов):
    # Увеличиваем диапазон локальных портов и размеры очередей
    echo 'net.ipv4.ip_local_port_range = 1024 65535' | sudo tee -a /etc/sysctl.conf
    echo 'net.core.somaxconn = 4096' | sudo tee -a /etc/sysctl.conf
    echo 'net.ipv4.tcp_max_syn_backlog = 4096' | sudo tee -a /etc/sysctl.conf
  • Управление памятью и свопом (для серверов БД):
    # Уменьшаем склонность к свопу, увеличиваем кэш для VFS
    echo 'vm.swappiness = 10' | sudo tee -a /etc/sysctl.conf
    echo 'vm.vfs_cache_pressure = 50' | sudo tee -a /etc/sysctl.conf
  • Лимиты файловой системы:
    # Увеличиваем максимальное количество открытых файлов (для nginx, БД)
    echo 'fs.file-max = 2097152' | sudo tee -a /etc/sysctl.conf

3. Применение изменений и проверка:

# Загружаем все изменения из /etc/sysctl.conf
sudo sysctl -p

# Проверяем текущее значение конкретного параметра
sudo sysctl net.core.somaxconn

Важно: Все изменения сначала тестирую на staging-окружении и мониторю метрики (через vmstat, iostat, sar) до и после настройки.