Я вижу две потенциальных проблемы.
phpuser
может проигнорировать Ваш новый предел, потому что он не мог бы использовать PAM для "вхождения в систему", таким образом, /etc/security/limits.conf
не применялся бы. Дополнительную информацию см. в этом ответе.
Ваш изменяют пользовательские пределы процессов. Ядро также имеет предел в масштабе всей системы на количество открытых дескрипторов файлов.
Это могло бы быть Вашей проблемой. Можно проверить значение как это:
$ sysctl fs.file-max
$ sysctl fs.file-nr
По умолчанию, макс. файлом shoud быть 10% Вашей доступной системной памяти в КБ, который не может быть очень большим количеством: 4 ГБ RAM ~ 400 000 файлов, который является ниже предела, который Вы пытаетесь установить.
В документации говорится:
Три значения в номере файла обозначают количество выделенных дескрипторов файлов, количество выделенных но неиспользованных дескрипторов файлов и максимальное количество дескрипторов файлов. Linux 2.6 всегда сообщает 0 как количество бесплатных дескрипторов файлов - это не ошибка, это просто означает, что количество выделенных дескрипторов файлов точно соответствует количеству используемых дескрипторов файлов.
Можно установить ulimit постоянно путем редактирования limits.conf.check этой ссылки
В случае php файлов посмотрите этот поток также
https://stackoverflow.com/questions/15937515/failed-to-open-stream-too-many-open-files
fs.file-max
. Можно попробовать что-то какsysctl fs.file-max=500000
. – Totor 18.12.2013, 00:46