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

Включает ли максимальное количество открытых дескрипторов на сервере его дочерние элементы?

Я знаю, что 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.