致命错误 - 打开的文件太多

2022-08-30 12:36:44

我尝试在我的新机器中运行PHPUnit测试,我得到这个错误:

PHP 致命错误:未捕获的异常“UnexpectedValueException”,消息“RecursiveDirectoryIterator::__construct(/usr/lib/php/pear/File/Iterator):无法打开目录:打开的文件太多”在 /usr/lib/php/pear/File/Iterator/Factory.php:114

旧机器上的相同代码运行良好...

新机器环境: PHP 版本: PHP 5.3.21 (cli) 旧版本: PHP 5.3.14

每次输出 PHPUnit:

................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 65 / 66 ( 98%)
E

Time: 34 seconds, Memory: 438.50Mb

There were 50 errors:

1) XXXXXXXXXXX
PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/usr/lib/php/pear/File/Iterator): failed to open dir: Too many open files' in /usr/lib/php/pear/File/Iterator/Factory.php:114

答案 1

这可能是对运行代码的服务器上的限制。每个操作系统只允许一定数量的打开文件/句柄/套接字。当服务器虚拟化时,此限制通常会进一步降低。在 Linux 服务器上,您可以使用 检查当前限制,如果您具有 root 访问权限,则可以使用相同的命令增加它。我假设Windows服务器也有一种方法。否则,您对此无能为力(除了要求您的托管商或管理员增加它)。ulimit -n

更多可配置的限制:

更改位置/etc/security/limits.conf

soft nofile 1024
hard nofile 65535

通过 或 或 在 增加 ulimit :ulimit -n 65535echo 65535 > /proc/sys/fs/file-max /etc/sysctl.conf

fs.file-max=65535

答案 2

如何提高文件打开限制(Linux 或 Max OS):

ulimit -n 10000

使用 or/和和和解决问题phpunitphpdbgWarning: Uncaught ErrorException: require([..file]): failed to open stream: Too many open files in [...]


推荐