Я знаю, что Linux ограничивает максимальное количество открытых дескрипторов, обычно до 1024.
Теперь предположим, что мне нужно создать сервер, который будет обрабатывать более 1024 пользователей, например 2000, без вмешательства в ядро.
Это означает, что я не мог справиться со всеми, просто открывая дескриптор для каждого клиента и опрашивая их. Выбрать() поскольку мое ядро поддерживает только 1024 хоста.
Но предположим, что я хочу создать параллельный сервер и создать дочерний / поток для каждого подключенного клиента.
1. Имеет ли дочерний элемент общий лимит дескрипторов родителя, другими словами, могу ли я создать 2000 дочерних элементов и обрабатывать каждого клиента отдельно?
2. Имеет ли поток общий лимит дескрипторов родителя, могу ли я создать 2000 потоков, каждый из которых обрабатывает одно соединение?
В Linux существует системное ограничение на количество открытых файловых систем: fs.file-max. Кроме того, отдельный лимит для каждого процесса называется nofile через модуль pam_limits (ulimit).
https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
Чем отличаются ulimit -n и / proc / sys / fs / file-max?
Делит ли дочерний элемент лимит дескриптора родителя
Общий предел fs.file-max системы - да, ulimit процесса - нет.
Теперь предположим, что мне нужно создать сервер, который будет обрабатывать более 1024 пользователей, например 2000, без вмешательства в ядро.
В файле в /etc/security/limits.d/
установите nofile для пользователя, запускающего сервер, по крайней мере, столько, сколько необходимо, возможно, 4000.
В файле в /etc/sysctl.d/
установите fs.file-max равным хотя бы общему количеству подключений плюс некоторое количество для других программ. Возможно 200000.