Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 增加最大打开文件数没有效果_Php_Linux_Centos - Fatal编程技术网

Php 增加最大打开文件数没有效果

Php 增加最大打开文件数没有效果,php,linux,centos,Php,Linux,Centos,对于一个小的学校项目,我正在一个你可以监控某些游戏服务器的网站上工作。我通过github项目GameQ接收服务器信息,该项目使用由自动加载php脚本加载的独立类文件。现在我有了一个大约10000个服务器IP的列表,我正试图用GameQ监控这些IP,但是当我尝试运行脚本时,它会给我以下错误: 警告:require(/httpdocs/game/src/GameQ/Exception/Query.php):无法打开流:第58行/httpdocs/game/src/GameQ/Autoloader.p

对于一个小的学校项目,我正在一个你可以监控某些游戏服务器的网站上工作。我通过github项目GameQ接收服务器信息,该项目使用由自动加载php脚本加载的独立类文件。现在我有了一个大约10000个服务器IP的列表,我正试图用GameQ监控这些IP,但是当我尝试运行脚本时,它会给我以下错误:

警告:require(/httpdocs/game/src/GameQ/Exception/Query.php):无法打开流:第58行/httpdocs/game/src/GameQ/Autoloader.php中打开的文件过多

我已经用1000个ip地址试过了,效果很好。但是当我把列表增加到1500时,它给了我一个错误。似乎某个地方的限制设置为1024,但无论我尝试了什么,我似乎都找不到在哪里

以下是我已经尝试将限额提高到200000的事项列表:

  • sysctl-wfs.file max=200000,并将此行添加到/etc/sysctl.conf
  • 将其添加到文件/etc/security/limits.conf中:

    root soft nofile 200000
    root hard nofile 200000
    
  • 将所需会话pam_limits.so添加到/etc/pam.d/login

  • 将ulimit-n 200000添加到/etc/sysconfig/httpd


因为在网络和stackoverflow上我找不到更多的选择,所以我非常绝望如何解决这个问题,所以我希望任何人都知道如何解决这个问题,或者知道我在这里做错了什么。我的服务器运行在CentOS 7上,我使用Plesk进行网站管理

可能是您的进程没有以root身份运行。如果是这种情况,那么您在limits.conf中设置的限制将需要更改域

您还可以通过以下方式确认流程限制:

检查过程限制实际是什么:

# ps -u <userid running your code>
...
#ps-u
...
然后

# cat /proc/<process id from above>/limits
...
#cat/proc//限制
...

可能与用户ID关联-这意味着您应该在limits.conf中放入关联的应用程序ID,而不是root

在我的例子中,我只是在/etc/security/limits.conf添加了两行,如下所示

* hard nofile 500000
* soft nofile 500000

有关更多帮助,请参阅

问题应该是为什么您需要在每台游戏服务器上都保留一个打开的手柄。连接、查询、断开连接,在任何时候都只需要一个文件句柄,这还不够吗?这是有道理的,但在处理超过10000台服务器时,这难道不需要花费很多时间吗?因为每台服务器的输出信息非常多,所以您可以并行运行并拥有多个打开的连接,但同时想要10000个连接是非常可笑的。查询10、50、100,但不是10000真的,但使用GameQ插件,我已经可以在2秒内完成1000,因此这似乎是一个很大的额外工作,而实际上唯一的问题是,无论我做什么,我的linux服务器都保持1024的限制,即使我已经做了更改made@RyanVincent我如何/在哪里可以检查这个?为什么php会给我一个错误,有很多打开的文件?