3

我的 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 之外的其他静态页面也加载缓慢
  • 网页test.org 测试显示非常长的第一个字节时间

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

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

阿帕奇配置?爬虫/机器人?攻击者?我已经走到了尽头,我应该在哪里寻找来确定问题出在哪里?

- - - 编辑: - - -

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

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

- - - 编辑 - - -

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

4

3 回答 3

5

经过大量研究,我可能已经找到了解决方案。如果我是正确的,那是 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小时没有打嗝。

于 2013-11-03T06:09:13.860 回答
0

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

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

Drupal 有一个内置的页面缓存机制,可以显着减少你的负载。只要您的页面是静态的(即没有动态内容),您就可以简单地打开缓存并观察性能立即恢复。

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

如果这还不够,那么像Varnish这样的基于服务器的缓存解决方案肯定会有所帮助。

于 2013-11-01T12:36:00.160 回答
0

Apache 对于“1-3 hits/sec avg”来说过于庞大和笨拙。

一旦我在更轻的(几乎是静态的 html,没有 DB)站点和类似的点击/秒遇到类似的问题。没有错误,没有高网络/CPU/内存/磁盘负载。WinXP 上的阿帕奇。

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

于 2013-10-31T00:58:51.920 回答