Тюнинг ядра для большого числа потоков IPv6 прокси

Настройка kernel.threads-max

Внимание, данная настройка проверена не работает на Ubuntu 16.04. Ubuntu устанавливает собственные параметры для kernel.threads-max мы не рекомендуем настраивать прокси на этой системе. Проверенной системой является Debian Jessie 8.0.

Кроме широкоизвестных параметров ulimit -n и ulimit -u количество потоков ограничено параметром sysctl kernel.threads-max. Этот параметр принимает максимальное значение, равное примерно количеству оперативной памяти в килобайтах/128, если более точно — lxr.free-electrons.com/source/kernel/fork.c#L282. Изменить его нельзя, кроме как модификацией исходников ядра. На 8Gb оперативной памяти значение будет примерно такое kernel.threads-max = 62372, на 12Gb — kernel.threads-max = 95120

Итак, следует проверить чему равен параметр


sysctl -a | grep kernel.threads-max
Настройка vm.max_map_count и kernel.pid_max

Дополнительно кол-во тредов лимитируется разрешенным кол-вом pid-ов в /proc/sys/kernel/pid_max (здесь значение не ограничено 65535) и кол-вом регионов памяти /proc/sys/vm/max_map_count, эти опции доступны для модификации и их нужно увеличивать до нужного размера.
Таким образом можно добиться количества потоков равного kernel.threads-max (в случае модифицированного ядра — и больше).

В /etc/sysctl.conf модифицировать параметры


vm.max_map_count=95120
kernel.pid_max=95120

И применить изменения командой 

sysctl -p