Что можно настроить в Linux для увеличения производительности приложения?

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

Ответ

Для увеличения производительности приложения в Linux можно оптимизировать несколько ключевых параметров ядра и системных лимитов.

1. Увеличение лимитов ресурсов процесса:

  • Файловые дескрипторы: Многие сетевые приложения и базы данных требуют высокого лимита.
    ulimit -n 65535
    # Для постоянного изменения отредактируйте /etc/security/limits.conf
  • Лимит памяти для процессов: Для Java-приложений (JVM) или других, использующих много памяти.
    ulimit -v unlimited

2. Настройка параметров ядра через sysctl:

  • Сетевые параметры для высоконагруженных серверов:
    # Увеличивает размер очереди входящих соединений
    sysctl -w net.core.somaxconn=65535
    # Уменьшает время ожидания для закрытия соединений, освобождая ресурсы
    sysctl -w net.ipv4.tcp_fin_timeout=30
    # Увеличивает диапазон локальных портов
    sysctl -w net.ipv4.ip_local_port_range="1024 65535"
  • Память и своп:
    # Уменьшает склонность системы к использованию свопа (swap). Значение 10 предпочтительно для серверов.
    sysctl -w vm.swappiness=10
    # Увеличивает максимальное количество memory maps, критично для Elasticsearch, MongoDB.
    sysctl -w vm.max_map_count=262144

3. Оптимизация ввода-вывода (I/O):

  • Выбор планировщика диска: Для SSD дисков noop или deadline часто эффективнее стандартного cfq.
    echo noop > /sys/block/sda/queue/scheduler
  • Отключение Transparent Huge Pages (THP): Может вызывать задержки у баз данных (Redis, Cassandra, MongoDB).
    echo never > /sys/kernel/mm/transparent_hugepage/enabled

4. Привязка процессов к CPU (CPU Pinning): Позволяет закрепить критичный процесс на конкретных ядрах, уменьшая переключения контекста и улучшая кэширование.

taskset -c 0,2,4 /usr/bin/my_app

5. Мониторинг и проверка: Все изменения необходимо тестировать под нагрузкой. Используйте инструменты для проверки эффекта:

  • perf для анализа производительности CPU.
  • iostat -x 2 для мониторинга дискового ввода-вывода.
  • vmstat 2 для отслеживания использования памяти, свопа и контекстных переключений.
  • dstat для комплексного просмотра.

Важно: Настройки через sysctl -w действуют до перезагрузки. Для постоянных изменений добавьте параметры в файл /etc/sysctl.conf.