我的问题是,当我在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的流程结构:
只有两个进程,一个空闲父进程和一个执行该操作的子进程。也许有一种方法可以让Apache增加为PHP创建的进程数量?关于如何调试它的任何想法?
另外,请注意,问题只存在于localhost上,它在生产服务器上运行正常,即它可以在缓存重建正在进行时呈现其他页面,所以我知道它与配置。