Apache在昂贵的PHP操作期间没有响应

时间:2016-01-22 08:23:29

标签: php windows multithreading apache xampp

我的问题是,当我在PHP localhost网站上重建缓存(一个很长的for循环)时,Apache完全停止响应 - 如果我在我的网站上打开任何页面,它将是加载只要缓存正在重建,这可能需要一个小时(它没有很好地优化,但这不是重点)。当缓存准备就绪并且没有执行昂贵的操作时,一切都会正常打开。似乎只有一个线程在运行,所以当一个脚本长时间执行时,没有其他任何东西可以打开。

我在Windows 7上使用XAMPP(Apache,PHP).Apache配置为使用WinNT MPM。这是配置文件的相关部分:

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxConnectionsPerChild: maximum number of connections a server process serves
<IfModule mpm_winnt_module>
    ThreadsPerChild        150
    MaxConnectionsPerChild   0
</IfModule>

我显然没有遇到150线程限制,我所讨论的昂贵操作是在单个脚本中执行的单个长for循环,所以它应该只需要一个线程。

这是Apache的流程结构:

screenshot

只有两个进程,一个空闲父进程和一个执行该操作的子进程。也许有一种方法可以让Apache增加为PHP创建的进程数量?关于如何调试它的任何想法?

另外,请注意,问题只存在于localhost上,它在生产服务器上运行正常,即它可以在缓存重建正在进行时呈现其他页面,所以我知道它与配置。

0 个答案:

没有答案