gpt4 book ai didi

PHP Docker - 是否可以在运行时设置 ulimit?

转载 作者:行者123 更新时间:2023-12-05 05:44:38 25 4
gpt4 key购买 nike

在我正在处理的项目中,xdebug 需要大约 1 小时才能生成覆盖率。我已经尝试过 phpdbg,但在我的测试套件中遇到以下错误:

stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE.
It is set to 1024, but you have descriptors numbered at least as high as 7228.
--enable-fd-setsize=8192 is recommended, but you may want to set it
to equal the maximum number of open files supported by your system,
in order to avoid seeing this error again at a later date.

我正在使用 php:7.0.33-fpm(是的,我知道,我们正在努力升级 PHP 版本:))

在命令行中使用ulimit 或依赖docker-compose to set it ,输出仍然认为它设置为 1024。实际上,如果我不尝试通过其他机制设置它,我容器中 ulimit -n 的当前输出实际上超过 100 万。

是否有任何机制可以通过运行时设置它而无需从头开始编译我们自己的 php 容器?

最佳答案

可以使用以下 PHP 代码段触发此警告:

<?php

$fds = [];
for ($i = 0; $i < PHP_FD_SETSIZE; $i++) { // PHP_FD_SETSIZE how FD_SETSIZE is exposed to userland
$fds[] = fopen(__FILE__, 'r');
}

$read = $fds;
$write = [];
$except = [];

echo sprintf("FD_SETSIZE=%d", PHP_FD_SETSIZE) . "\n";

stream_select($read, $write, $except, 0);
/*
* Warning: stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE.
* It is set to 1024, but you have descriptors numbered at least as high as 1027.
* --enable-fd-setsize=2048 is recommended, but you may want to set it
* to equal the maximum number of open files supported by your system,
* in order to avoid seeing this error again at a later date. in /in/ZfBsg on line 14
*/

FD_SETSIZE 是由 POSIX 定义的常量(参见 select(2) manpage )。虽然警告使您相信可以减轻此警告通过使用 --enable-fd-setsize=[some-larger-value] 重新编译 php,这是不正确的。 FD_SETSIZE 不能在运行时,因为它的值是在编译内核时确定的。

我看了一会儿 PHP 源代码,我不确定为什么 --enable-fd-setsize 存在,因为它不存在似乎可以做任何事情(尽管我没有在 Windows 上对此进行测试)。

这个问题的唯一解决方案似乎是:

  • 避免stream_select
  • 避免打开太多文件

关于PHP Docker - 是否可以在运行时设置 ulimit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71565511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com