Как мне увеличить лимит файловых дескрипторов в пользовательской программе?
Я пишу часть серверного программного обеспечения на 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.