我在我的Windows XP(SP3)开发机器上本地安装了Apache 2.2.11,这是我在3个月前安装的。
过去几周我刚开始有一个奇怪的问题。
Apache正在为phpMyAdmin等一些基本的PHP应用程序提供服务。 当我发出页面请求时,Apache似乎没有完成为该页面提供的所有资源。 Firefox显示“从服务器名称…传输数据”消息,并且该页面从未完成。 Internet Explorer也发生同样的问题。
我有时可以知道它正在等待哪个资源,因为除了某些图像或类似资源外,大部分页面都会呈现。 (不知道为什么Firebug不显示这个)
它没有每个页面请求的问题 – 对于大部分资源caching在浏览器中的页面请求,页面请求将毫无问题地工作。 或者非常轻的页面将毫无问题地工作。
但是,如果我“硬”刷新页面,我会有这个问题(可能是因为它是请求所有页面资源)
有谁知道这可能是什么?
奇怪的是,它刚刚开始发生 – 我没有对我的系统做任何改变(我知道)
我尝试使用Apache ThreadsPerChild设置,但似乎没有什么区别。
更新:
我一直在做更多的testing。 我一直在服务最基本的页面,只是一个普通的HTML文件:
<html> <body> <h1>testing</h1> </body> </html>
如果我连续多次请求这个页面,并且每个请求都会在前一个完成之后立即发生,那么请求超时的时间有50%。
但是,如果我在请求之间留出1-2秒的间隔,那么就没有问题了。
这与浏览器请求真正的应用程序页面时所观察到的相关。 当浏览器没有任何caching的时候,浏览器会在很短的时间内请求所有的页面资源 – 这似乎是触发问题的原因。
UPDATE2:
Nathan Long通过服务器状态页面帮助我更好地理解了这个问题(见下文)。
这很奇怪,它就像服务器有一个Hickup发送数据到客户端。 客户坐在那里等待永远不会到达的数据。 closures客户端进程不会终止服务器上的连接 – 服务器上每个先前尝试的连接仍然有活动的线程,但他们只是坐在那里 – 不发送任何数据,也不会终止。 (即使客户端现在closures)只有重启服务器才能终止它们。
来自Apache邮件列表的William Rowe给了我答案,这显然是一个已知的事情。
XP [个人操作系统]仅支持TransmitFile API的两个同时应用程序。 请在您的configuration中尝试“EnableSendfileclosures”的“股票答案”。
随着这一变化,这个问题已经消失了。
有同样的问题 – 在Windows XP上使用Apache 2.2.14。 我不得不使用一个稍微长一点的(但仍然非常基本的)静态HTML文件来解决负载问题,但是确实发生了。
我使用conf/extra/httpd-info.conf启用了localhost / server-status页面(你也必须在主configuration文件中启用几个模块),我注意到每次加载问题发生时,正在处理的请求数量增加1 ,空闲工作人员数量减less。 即使在服务器状态页面上有“无限负载”,情况也是如此 – 我点击刷新,并且成功立即加载,并且还有一个请求正在处理。
正在处理的每个请求都显示“正在发送回复”状态。
我也打开httpd.conf ExtendedStatus ,现在我看到每个请求正在处理的详细信息。 很多已经进行了几分钟,其中很多已经从开始转移了0.0千字节。
我不知道该怎么做。
您可以通过执行以下操作在http://your.server.name/server-status上提供服务器状态页面:
1)在httpd.conf启用mod_status和mod_info (更多信息)
2)还要添加Include conf/extra/httpd-info.conf ,或者添加下面的指令(这就是httpd-info.conf包含的内容):
# Turn on server status <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from localhost </Location> # Enable more status info ExtendedStatus On
3)重新启动Apache并加载状态页面。
检查你的Apache错误日志你有没有看到类似“Out of child proceses尝试增加Max Servers”? 如果是这样,那么你遇到了许多开放的连接到机器的问题。
您也可以检查您的PHP是否有任何长时间运行的进程,如果您可能需要增加PHP.ini中的script_timeout值。
还要确保你的PHPlogging错误,并确保脚本本身不会退出的错误。
你可以创build一个简单的test.html页面的静态内容版本,看看它是否正确地重复载入,如果是的话,那么它不是Apache(persay)。