У меня настроен лимит открытых файлов в /etc/security/limits.conf
* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000
Когда я запускаю процесс из оболочки, он работает нормально.
Но есть один процесс, который запускается при загрузке сервера.
# update-rc.d myprocess defaults 99
# cat /proc/1435/limits
Limit Soft Limit Hard Limit Units
....
Max open files 4096 4096 files
....
Почему это происходит?
ответ: попробуйте "man limits.conf" Это часть PAM: подключаемые модули аутентификации
Эти ограничения применимы только при использовании программы, созданной для использования PAM, обычно выполняющей аутентификацию (например, login, su, sudo, ssh, ...). Когда вы входите в систему как root (через login, su, sudo, ...), вы аутентифицируетесь, поэтому ваша система использует различные настройки PAM, включая limits.conf.
Когда система загружается, аутентификация не выполняется, поэтому никакая конфигурация PAM никогда не читается. Ваш демон будет использовать настройки по умолчанию. Если позже вы (повторно) запустите его из root (например, используя sudo su - в Ubuntu), ваша текущая оболочка получит настройки limits.conf, и все, что она запускает, также унаследует их.
возможные решения: поскольку root в любом случае может переопределить ограничения, вам следует вместо этого изменить настройки в сценарии запуска вашего демона (ов). Например, с ulimit (поиск внутри "man bash")
Вы также можете попробовать использовать такую конструкцию: su - -c 'daemon ... = myprocess' в своем сценарии запуска. Возможно, этот дополнительный su будет использовать PAM и изменит лимиты. Я не знаю. Скажи нам!