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

Я пишу часть серверного программного обеспечения на C++ и намереваюсь, чтобы каждый экземпляр управлял одновременными соединениями 10k-20k. Он уже работает и способен обрабатывать множество удаленных подключений в секунду, которые мгновенно закрываются, однако, если сервер когда-либо пропустит 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.

0 ответов

Другие вопросы по тегам