使用php运行控制台应用程序的几个实例


Running several instances of a console application with php

我在Windows7机器上运行一个apache服务器。

我做了两个脚本:

  1. 保存一个html文件,该文件通过ajax多次调用第二个文件并输出结果
  2. 调用时加载控制台应用程序,该应用程序执行简单任务并将结果写回

该应用程序使用phpexec()执行(也使用proc_open()测试),即使使用多个("同时"ajax调用),一切似乎都很好

启用mpm-使用mpm-winnt

我注意到,如果我启动了几个ajax调用(假设20个调用),那么只有的apache服务器会以最大(exe文件)同时打开6个进程。即使我在任务管理器中查看进程选项卡,我也只能看到并行执行的应用程序的6个实例。我预计大约20个-似乎其他电话正在等待6…的池

知道为什么吗?以及如何强制服务器增加此"池"?

编辑-更多信息

Apache 2.4(x64)

PHP 5.6(x64)-用作apache模块。

httpd.conf

httpd-mpm.conf

如果我手动打开程序,它会加载我想要的次数。

如果我不使用ajax,我打开20个加载应用程序的选项卡——相同的6个池。

该程序为每个实例使用约70mb(峰值)的内存。

这个限制不是服务器端的,而是由web浏览器维护的
RFC建议必须将此限制设置为每个服务器2个,但web浏览器不符合:)
我从BrowserScope找到了这个信息-每个主机名的最大连接数

Browser | Version | Connections per Hostname | Max Connections
--------+---------+--------------------------+----------------
Chrome  | 32→     | 6                        | 10
Firefox | 26→     | 6                        | 17
IE      | 9→      | 6                        | 35
IE      | 10→     | 8                        | 17
IE      | 11→     | 13                       | 17   
Safari  | 7.0.1→  | 6                        | 17   

如何连接到服务器(通过AJAX或打开多个选项卡)并不重要。无论如何,它受到了Halayem上面提到的限制的影响。

例如,如果您尝试通过另一个网络工具(如cURL)调用php脚本,我相信您会看到与发送请求一样多的程序实例。