在我的开发框中(谢天谢地,它还没有在生产中发生 - 我还知道),因为我正在PHP网站上工作,我偶尔会遇到这样的错误:
警告: require_once( filename.php ):失败 打开流:打开的文件过多 第502行的路径 /functions.php
致命错误:require_once():无法打开所需的' filename.php ' (include_path ='/ my / include / path')in 第502行的路径 /functions.php
functions.php的第502行是我的“自动加载”功能,它自动需要包含我使用的类的PHP文件:
function autoload($className)
{
require_once $className . ".php"; // <-- Line 502
}
通过“偶然”错误,我的意思是它可以在大约一天的开发中正常工作,然后当我第一次看到这个时,我可以刷新页面,它会再次没问题,然后刷新给了我同样的错误。这种情况在每次开始显示之前只发生过几次。有时它需要的文件名称(我有一个分成几个PHP文件的脚本)是不同的...它并不总是它轰炸的第一个或最后一个或中间文件。
重启php-fpm似乎解决了症状,但从长远来看并不是问题。
我在我的Mac(OS X 10.8)上使用nginx 1.4.2通过php-fpm运行PHP 5.5.3。
正在运行lsof | grep php-fpm | wc -l
告诉我php-fpm已打开 824 个文件。当我检查实际输出时,我看到了这一点,以及一些.so
和.dylib
文件,绝大多数行都是这样的:
php-fpm 4093 myuser 69u unix 0x45bc1a64810eb32b 0t0 ->(none)
每行的“69u”段和0x45bc1a6481 ...号不同。这意味着什么?这是问题吗? (ulimit
是“无限制”)
顺便说一句(虽然可能不相关),但也有一两个:
php-fpm 4093 myuser 8u IPv4 0x45bc1a646b0f97b3 0t0 TCP 192.168.1.2:59611->rest.nexmo.com:https (CLOSE_WAIT)
(我有一些页面使用HttpRequest(PECL库)来调用Nexmo API。这些页面是否未正确关闭或者什么?我怎样才能打击那些?)
答案 0 :(得分:1)
尝试将php-fpm(默认设置为无限)设置为更适合您需要的值。
例如:
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s
也许,如果你的应用程序使用大量文件,也可以设置它:
rlimit_files = 1024