php-Apache的页面加载时间非常长
作者:互联网
我的Drupal 6网站已经运行了好几年,但是最近却经历了间歇性的极慢速度(10-60秒页面加载).缓慢的几个小时,然后是正常(4-6秒)的页面加载时间.页面始终加载无错误,只是有时需要花费很长时间.
我的设置:
> Windows Server 2003
> Apache / 2.2.15(Win32)Jrun / 4.0
> PHP 5
> MySQL 5.1
> Drupal 6
> ColdFusion 9
> Vmware虚拟环境
>企业防火墙后面的DMZ
>流量:1-3次/峰值
故障排除
> Apache错误日志中没有适用的错误
> drupal事件日志中没有错误
> Drupal开发模块在366.23毫秒内显示242个查询,页面执行时间2069.62 ms. (所以看起来查询和PHP脚本不是问题)
>没有异常高的CPU,内存或磁盘IO
>冷融合应用程序以及drupal之外的其他静态页面加载速度也很慢
> webpagetest.org测试显示到第一字节的时间非常长
问题似乎出在Apache响应请求上,但以前我只在100%cpu负载下看到过这种情况.仅通过资源监视来判断,似乎没有发生任何事情.
这就是问题所在-大约一半的站点访问来自我们的LAN,但是如果我禁用防火墙规则并阻止来自网络外部的访问,则内部(LAN)访问(1000台设备)速度很快.但是,一旦外部访问恢复,该站点就会瘫痪.
Apache配置?爬虫/机器人?攻击者?我已经走到尽头了,我应该在哪里确定问题所在?
– – – 编辑: – – –
随附的是来自webpagetest.org的瀑布图,显示了15秒的加载时间.我看过的时间长达几分钟.同样,服务器在很多时间都可以正常运行.绿色区域表示浏览器已发送请求,正在等待接收来自服务器的数据的第一个字节.这当然是后端延迟,但是令人困惑的是在这种缓慢状态下几乎没有使用CPU.
(代表人数不足,无法发布图片,请参阅https://webmasters.stackexchange.com/questions/54658/apache-very-high-page-load-time
– – – 编辑 – – –
从Apache的角度来看-这可能是ThreadsPerChild问题吗?
解决方法:
经过大量研究,我可能已经找到了解决方案.如果我是正确的,那是一个Apache配置问题.具体来说,是“ ThreadsPerChild”指令.查看… http://httpd.apache.org/docs/2.2/platform/windows.html
Because Apache for Windows is multithreaded, it does not use a
separate process for each request, as Apache can on Unix. Instead
there are usually only two Apache processes running: a parent process,
and a child which handles the requests. Within the child process each
request is handled by a separate thread.ThreadsPerChild: This directive is new. It tells the server how many
threads it should use. This is the maximum number of connections the
server can handle at once, so be sure to set this number high enough
for your site if you get a lot of hits. The recommended default is
ThreadsPerChild 150, but this must be adjusted to reflect the greatest
anticipated number of simultaneous connections to accept.
事实证明,此指令在我的配置中根本没有设置,因此默认为64.我通过在任务管理器中查看第二个httpd.exe进程的线程数来确认这一点.当服务器的连接数超过64个时,多余的请求仅需等待线程打开即可.我在httpd.conf中添加了ThreadsPerChild 150.
另外,我启用了apache状态模块
http://httpd.apache.org/docs/2.2/mod/mod_status.html
…除其他外,它使您可以随时查看服务器上活动请求的总数.立即,我可以看到多达80个活动请求的峰值.时间会证明一切,但是我相信这将解决我的问题.到目前为止,有30个小时没有打h.
标签:apache,drupal-6,mysql,php 来源: https://codeday.me/bug/20191030/1966486.html