Apache 非常高的页面加载时间

Aar*_*ler 3 php mysql apache drupal-6

我的 Drupal 6 站点多年来一直运行顺利,但最近经历了间歇性的极度缓慢(10-60 秒页面加载)。几个小时的缓慢,然后是几个小时的正常(4-6 秒)页面加载。页面总是加载没有错误,只是有时需要永远。

我的设置:

  • 视窗服务器 2003
  • Apache/2.2.15 (Win32) Jrun/4.0
  • PHP 5
  • mysql 5.1
  • Drupal 6
  • 冷聚变 9
  • vmware 虚拟环境
  • 企业防火墙后面的 DMZ
  • 流量:1-3 次点击/秒峰值

故障排除

  • apache 错误日志中没有适用的错误
  • drupal 事件日志中没有错误
  • Drupal 开发模块在 366.23 毫秒内显示 242 个查询,页面执行时间为 2069.62 毫秒。(所以看起来查询和php脚本不是问题)
  • 没有异常高的 CPU、内存或磁盘 IO
  • 冷融合应用程序和 Drupal 之外的其他静态页面也加载缓慢
  • 网页测试.org 测试显示非常高的时间到第一个字节

问题似乎与 Apache 响应请求有关,但以前我只在 100% cpu 负载下看到过这种行为。仅从资源监控来看,似乎几乎没有发生什么。

关键是——大约有一半的站点访问来自我们的 LAN,但是如果我禁用防火墙规则并阻止来自我们网络外部的访问,则内部 (LAN) 访问(1000 多个设备)会很快。但是一旦外部访问恢复,该站点就会瘫痪。

阿帕奇配置?爬虫/机器人?攻击者?我已经快用完了,我应该去哪里寻找问题所在?

- - - 编辑: - - -

附件是来自 webwebtest.org 的瀑布图,显示了 15 秒的加载时间。我见过高达几分钟的时间。同样,服务器在大部分时间都运行良好。绿色区域表示浏览器已发送请求并正在等待从服务器接收第一个字节的数据。这当然是后端延迟,但令人费解的是,在这种缓慢期间几乎没有使用CPU。

(没有足够的代表发布图片,请参阅https://webmasters.stackexchange.com/questions/54658/apache-very-high-page-load-time

- - - 编辑 - - -

在 Apache 方面 - 这可能是 ThreadsPerChild 问题吗?

Aar*_*ler 5

经过大量研究,我可能已经找到了解决方案。如果我是对的,那是 apache 配置问题。具体来说,“ThreadsPerChild”指令。见... http://httpd.apache.org/docs/2.2/platform/windows.html

因为 Apache for Windows 是多线程的,所以它不会像 Unix 上的 Apache 那样为每个请求使用单独的进程。相反,通常只有两个 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 小时没有打嗝。