Ответ
Для увеличения производительности приложения в 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.