Apache 停滞不前了吗?/server-status 显示超过 240 个请求,例如 "OPTIONS * HTTP/1.0" 200 - "-" "Apache (internal dummy connection)"

Ste*_*ski 5 freebsd log-files ufs dump apache-2.2

一些细节:

  • 网络服务器:Apache/2.2.13 (FreeBSD) mod_ssl/2.2.13 OpenSSL/0.9.8e
  • 操作系统:FreeBSD 7.2-RELEASE
  • 这是一个 FreeBSD 监狱。
  • 我相信我使用 Apache 'prefork' MPM(我为 FreeBSD 运行默认设置)。
  • 我使用 MaxClients 的默认值 (256)

我已启用 mod_status,并带有“ExtendedStatus On”。当我查看 /server-status 时,我会看到一些常规请求。我还看到来自“本地主机”的 240 多个请求,例如这些。

37-0    -   0/0/1   .   0.00    1510    0   0.0 0.00    0.00    127.0.0.2   www.example.gov OPTIONS * HTTP/1.0
38-0    -   0/0/1   .   0.00    1509    0   0.0 0.00    0.00    127.0.0.2   www.example.gov OPTIONS * HTTP/1.0
39-0    -   0/0/3   .   0.00    1482    0   0.0 0.00    0.00    127.0.0.2   www.example.gov OPTIONS * HTTP/1.0
40-0    -   0/0/6   .   0.00    1445    0   0.0 0.00    0.00    127.0.0.2   www.example.gov OPTIONS * HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

我昨天还看到来自本地主机的大约 2417 个请求,如下所示:

Apr 14 11:16:40 192.168.16.127 httpd[431]: www.example.gov 127.0.0.2 - - [15/Apr/2010:11:16:40 -0700] "OPTIONS * HTTP/1.0" 200 - "-" "Apache (internal dummy connection)"
Run Code Online (Sandbox Code Playgroud)

http://wiki.apache.org/httpd/InternalDummyConnection 上的页面说“这些请求是完全正常的,通常您不需要担心它们”,但我不太确定。

为什么有超过 230 个?这些是活动连接吗?如果我有“MaxClients 256”和超过 230 个这样的连接,那么我的网络服务器似乎危险地接近耗尽可用连接。Apache 似乎也只需要少数这些“内部虚拟连接”

我们昨晚实际上有两次无法解释的中断,我想知道这些“内部虚拟连接”是否导致我们用尽了可用连接。

更新 2010/04/16

8 小时后。/server-status 页面仍然显示有 243 行表示“www.example.gov OPTION *”。我相信这些联系并不活跃。服务器大部分时间处于空闲状态(当前正在处理 1 个请求,9 个空闲工作人员)。Unix 主机上只有 18 个活动的 httpd 进程。

如果这些连接不是活动的,为什么它们会显示在 /server-status 下?我原以为它们会在初始化后几分钟到期。

小智 5

Apache 处理雷鸣般的羊群的方式与您的想象略有不同。当您收到大量入站流量时,它会产生许多子进程,如果它确定需要更多子进程,则会在下一个时间间隔内产生两倍的子进程,直到最终有足够的进程来处理请求或达到 maxclients。

如果你看到这些,这意味着 apache 只是在检查孩子,而导致 apache 分叉许多进程的任何东西可能都已经消失了。是的,它们确实占用了客户端连接,但是,任何导致事情发生的事件都可能消失了。

我会在您的日志中检查的第一件事是事件发生前的一堆 302。

如果你有类似的东西

<?php include("http://www.oursite.com/header.php");?>   
Run Code Online (Sandbox Code Playgroud)

哪里缺少 header.php 和

ErrorDocument 404 /404.php 
Run Code Online (Sandbox Code Playgroud)

其中 404.php 包含 header.php,您将得到一个递归循环,并且该页面上的点击将立即导致 apache 使用所有可用连接。


Ste*_*ski 1

嗯,这有一个令人惊讶的答案。这是由我们在午夜拍摄 UFS 文件系统快照时出现的文件系统问题引起的。

这似乎是由 FreeBSD UFS 错误引起的。我们在 FreeBSD 主机上使用 FreeBSD Jails,并使用默认的 UFS 文件系统。UFS 文件系统很大—— 1.8TB。

每晚一次,我们使用“dump(8)”运行备份。dump(8) 在备份之前创建文件系统的快照,这会冻结文件系统。转储应该适用于小于 2TB 的文件系统,但在我们的例子中失败了。这家伙也有同样的问题。

(我将答案从问题部分移至答案部分。stefan,20100608)