繁体   English   中英

Apache非常高的页面加载时间

[英]Apache VERY high page load time

我的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 devel模块在366.23毫秒内显示242个查询,页面执行时间为2069.62毫秒。 (所以它看起来像查询和PHP脚本不是问题)
  • 没有异常高的CPU,内存或磁盘IO
  • 冷融合应用程序以及drupal之外的其他静态页面也会加载缓慢
  • webpagetest.org测试显示非常高的首字节时间

问题似乎是Apache响应请求,但以前我只看到100%cpu负载下的这种行为。 仅仅通过资源监控来判断,看起来似乎很少。

这是踢球者 - 大约一半的网站访问来自我们的局域网,但如果我禁用防火墙规则并阻止从我们网络外部访问,内部(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

因为Apache for Windows是多线程的,所以它不会为每个请求使用单独的进程,因为Apache可以在Unix上使用。 相反,通常只有两个Apache进程在运行:父进程和处理请求的子进程。 在子进程内,每个请求都由一个单独的线程处理。

ThreadsPerChild:这个指令是新的。 它告诉服务器它应该使用多少个线程。 这是服务器可以同时处理的最大连接数,因此如果您获得大量点击,请确保将此数字设置为足够高。 建议的默认值为ThreadsPerChild 150,但必须对其进行调整以反映要接受的最大同时连接数。

事实证明,这个指令在我的配置中根本没有设置,因此默认为64.我通过查看任务管理器中第二个httpd.exe进程的线程数来确认这一点。 当服务器超过64个连接时,多余的请求只需要等待线程打开。 我在httpd.conf中添加了ThreadsPerChild 150。

另外,我启用了apache状态模块http://httpd.apache.org/docs/2.2/mod/mod_status.html

...除其他外,允许人们在任何给定时刻查看服务器上的活动请求总数。 马上,我可以看到高达80个活跃请求的峰值。 时间会证明,但我相信这将解决我的问题。 到目前为止,30个小时没有打嗝。

对于“1-3次点击/秒平均值”,Apache太庞大而且笨拙。

一旦我有类似的问题与更轻(几乎静态-html,没有数据库)网站,以及类似的点击/秒。 没有错误,没有高网络/ CPU /内存/磁盘负载。 WinXP上的Apache。

我在Apache之前为静态文件插入了nginx,它开始像魅力一样工作。

缓存。 它缓存的解决方案。

Drupal(与大多数其他大型CMS平台一样)由于其性质而倾向于这种事物 - 每个页面都是动态构建的,由一堆数据库表和代码模块构成。 你在那里越多,它就越慢,但即使是相当简单的页面,如果你的网站获得一点流量,也会变得非常慢。

Drupal内置了一个页面缓存机制,可以显着降低您的负载。 只要您的页面是静态的(即没有动态内容),您就可以直接启用缓存并观察性能是否正常。

如果您有动态内容,仍然可以为页面的静态部分启用缓存。 它有点复杂(超出了这个答案的范围),但值得努力。

如果这仍然不够,基于服务器的缓存解决方案,如Varnish肯定会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM