Я пишу часть серверного программного обеспечения на C ++ и планирую, чтобы каждый экземпляр управлял 10-20 тысячами одновременных подключений. У меня он уже работает и способен обрабатывать множество удаленных подключений в секунду, которые мгновенно закрываются, однако, если сервер когда-либо пройдет 1024 одновременных подключения, он задохнется, поскольку он ограничен таким количеством открытых файловых дескрипторов.
Я просмотрел множество решений, размещенных в Интернете, и довольно запутался. Я сделал все, что говорили люди, и еще не нашел решения, которое подойдет для моего приложения.
Я указываю, что это мое «настраиваемое приложение», потому что почти каждый процесс под моей учетной записью в системе имеет ограничение в 40 тыс. Файловых дескрипторов, за единственным исключением одного - моей программы, которая все еще находится на базовом уровне 1024 Предел файлового дескриптора / 4096, хотя все говорят, что он действительно должен быть на уровне 40000/40000.
/etc/security/limits.conf
содержит строку * - nofile 40000
ulimit -n
печатает 40000
cat /proc/sys/fs/file-max
печатает 100000
cat /proc/[application pid]/limits
говорит, что ограничение файлового дескриптора soft: 1024 / hard: 4096
cat /proc/[application's parent pid]/limits
говорит, что ограничение файлового дескриптора soft: 40000 hard: 40000
независимо от того, как я запускаю программу (через xterm, tty1, bash, sh, cinnamon и т. д.).
Я даже выполнил инструкции Вот и изменил мои различные заголовки, которые определяют __FD_SETSIZE
и изменил их все на 40000
Я пытаюсь решить эту проблему в течение некоторого времени, и любая помощь будет принята с благодарностью. Я использую дистрибутив Linux Mint 17.2, версия ядра 3.16.0-38-generic, а мой g ++ - это версия 4.8.4.