Назад | Перейти на главную страницу

Как увеличить лимит файлового дескриптора в пользовательской программе

Я пишу часть серверного программного обеспечения на 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.