我在Windows7机器上运行一个apache服务器。
我做了两个脚本:
- 保存一个html文件,该文件通过
ajax
多次调用第二个文件并输出结果 - 调用时加载控制台应用程序,该应用程序执行简单任务并将结果写回
该应用程序使用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脚本,我相信您会看到与发送请求一样多的程序实例。