В php-fpm.conf у меня есть:
rlimit_files = 8192
Мой сервер - это SmartMachine 1G от Joyent, что означает, что это Solaris с 1 ГБ памяти.
Моя проблема в том, что при высокой нагрузке я получаю такие ошибки:
Warning (2): touch() [function.touch]: Unable to create file app/tmp/cache/persistent/cake_core_users_da because Too many open files in [cake/libs/file.php, line 125]
У меня слишком мало rlimit_files, и если да, то как высоко мне его установить?
Вы уверены, что это действительно работает? Вы можете использовать «pfiles» в идентификаторе процесса, чтобы увидеть, что он действительно открыл. Вы также можете запустить «prctl» для идентификатора процесса и найти значение «process.max-file-descriptor». В списке будут указаны базовое, привилегированное и системное значение. Ограничение на процесс является самым низким из них. Это может быть ошибка утечки файлового дескриптора в приложении, если у него действительно так много открытых.
Я думаю, что моя проблема была / есть где-то еще и связана с тем, что процессы php остаются в живых. Я как-то исправил это, не позволив им остаться в живых навсегда.
Есть еще одно ограничение на количество открытых файлов, которое может быть наложено самим Solaris. Например, есть статья об обходе ограничения 256 файловых дескрипторов в 32-битных двоичных файлах в Solaris.
Попробуйте выяснить, является ли ваш двоичный файл php 32- или 64-разрядным.