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

Слишком много открытых файлов

В 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-разрядным.