在 php-fpm.conf 中我有:
rlimit_files = 8192
我的服务器是 Joyent 的 1G SmartMachine,这意味着它是具有 1GB 内存的 Solaris。
我的问题是在高负载下会出现如下错误:
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 是否太低?如果是,我应该将其设置得多高?
答案1
你确定它真的在工作吗?你可以在进程 ID 上使用“pfiles”来查看它实际打开了什么。你也可以在进程 ID 上运行“prctl”并查找“process.max-file-descriptor”值。将列出基本、特权和系统值。进程的限制是其中最低的。如果应用程序确实打开了那么多文件描述符,则可能是应用程序存在文件描述符泄漏错误。
答案2
Solaris 本身可能对打开文件数有其他限制。例如,一篇文章关于如何解决 Solaris 上 32 位二进制文件中 256 个文件描述符的限制。
尝试弄清楚你的 php 二进制文件是 32 位还是 64 位。
答案3
我认为我的问题出在其他地方,与 php 进程保持活动状态有关。我通过不让它们永远保持活动状态来解决这个问题。