Универсальных «оптимальных настроек ядра» не существует. Значения по умолчанию в современных Ubuntu и Debian разумны для большинства задач. Меняйте параметр, только если понимаете, какую проблему он решает, и можете измерить результат.
Как применять настройки
Храните свои параметры в отдельном файле в /etc/sysctl.d/ — так их видно и легко откатить:
$ sysctl net.ipv4.tcp_congestion_control$ nano /etc/sysctl.d/90-tuning.conf$ sysctl --systemПервая команда показывает текущее значение, последняя применяет все файлы настроек.
TCP BBR
BBR — алгоритм управления перегрузкой TCP. Он помогает при отдаче больших файлов удалённым клиентам по каналам с потерями. Модуль есть в ядрах Ubuntu 22.04/24.04 и Debian 12.
net.core.default_qdisc = fqnet.ipv4.tcp_congestion_control = bbr$ sysctl --system$ sysctl net.ipv4.tcp_congestion_controlЭффект оценивайте замером: скачайте большой файл с сервера до и после изменения из одной и той же точки.
Очередь входящих соединений
net.core.somaxconn ограничивает очередь соединений, которые ещё не принял процесс. В ядрах 5.4 и новее значение по умолчанию уже 4096. Увеличивать его имеет смысл, только если под нагрузкой растут счётчики переполнений:
$ nstat -az TcpExtListenOverflows TcpExtListenDropsУчтите: сама программа тоже задаёт размер очереди (в Nginx — параметр backlog у listen), и действует меньшее из двух значений.
Лимит открытых файлов
Каждое сетевое соединение — открытый файловый дескриптор. Ошибка «Too many open files» означает, что процесс упёрся в свой лимит. Системный предел fs.file-max в современных ядрах очень велик — упираются почти всегда в лимит процесса.
$ grep 'open files' /proc/$(pidof -s nginx)/limitsДля служб systemd лимит задаётся в unit-файле, а не в /etc/security/limits.conf — тот действует только на сессии входа пользователей:
$ systemctl edit nginx[Service]LimitNOFILE=65535$ systemctl restart nginxДля Nginx поднимите и его собственные параметры worker_rlimit_nofile и worker_connections в nginx.conf — иначе он не воспользуется новым лимитом.
Проверьте результат
$ sysctl net.core.default_qdisc net.ipv4.tcp_congestion_control$ grep 'open files' /proc/$(pidof -s nginx)/limitsКак откатить
Удалите свой файл из /etc/sysctl.d/ и перезагрузите сервер — ядро вернётся к значениям по умолчанию. Override службы удаляется командой systemctl revert nginx.