一些细节:
我已启用mod_status,与“ExtendedStatus On”。 当我查看/服务器状态时,我看到一些常规的请求。 我也看到来自“localhost”的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
我也看到了来自本地主机的约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)"
在http://wiki.apache.org/httpd/InternalDummyConnection页面上说:“这些请求是完全正常的,一般来说,你不需要担心它们”,但我不太确定。
为什么有超过230个? 这些活动连接? 如果我有“MaxClients 256”,并有超过230个这样的连接,似乎我的networking服务器已经危险地接近用完的连接了。 也似乎Apache应该只需要less数这些“内部虚拟连接”
我们昨天实际上有两个原因不明的停电,我想知道这些“内部的虚拟连接”是否导致我们用完了可用的连接。
更新2010/04/16
这是8个小时之后。 /服务器状态页仍然显示有243行说“www.example.gov选项*”。 我相信这些连接是不活跃的。 服务器大部分空闲(1个请求当前正在处理,9个空闲的工作人员)。 Unix主机上只有18个活动的httpd进程。
如果这些连接不活动,为什么他们显示在/服务器状态下? 我预计他们将在初始化几分钟后过期。
阿帕奇处理一个雷鸣的牛群有点不同于你想象的。 当你收到一串入站stream量时,会产生大量的subprocess,如果它确定需要更多的进程,它会在下一个时间间隔内产生两倍的进程,直到它有足够的进程来处理请求或者访问maxclient。
如果你看到这些,这意味着apache只是检查孩子,而不pipe是什么导致apache来分叉许多进程可能已经没有了。 是的,他们确实占用了客户端的连接,但是无论什么事情都可能导致事情上升。
首先我会检查你的日志将是事件之前的一堆302。
如果你有类似的东西
<?php include("http://www.oursite.com/header.php");?>
header.php丢失和
ErrorDocument 404 /404.php
其中404.php包括header.php,你会得到一个recursion循环,并在该网页上的命中将立即导致Apache使用所有可用的连接。
我的理解是,鉴于这些是从父母到孩子的过程的联系,他们只是Apache跟踪孩子们在做什么。 请记住:
就我所知,情况并非如此,虚拟连接“耗尽”了孩子。 Apache正在检查它的孩子的状态,而不是运用它们来testing它们是否工作。
如果内存服务,这些是由轻量级代理(如Lighttpd)生成的testing连接,这些代理位于较重的服务器(如Apache)之前。
鉴于你在监狱里,主机服务器可能通过lighttpd代理请求(私人)监狱IP?
你需要find哪些进程连接到你的Apache端口(我假设它是80)。
我没有FreeBSD系统,所以我可以确认这些命令,但至less在Mac上这应该给你一个提示:
$ lsof -i
它会显示如下所示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME BadGuy 26655 yvesj 24u IPv4 0x3f32270 0t0 TCP localhost:56696->localhost:56695 (ESTABLISHED) GoodGuy 26656 yvesj 15u IPv4 0x5b7666c 0t0 TCP localhost:56695 (LISTEN) GoodGuy 26656 yvesj 16u IPv4 0x72a9e64 0t0 TCP localhost:56695->localhost:56696 (ESTABLISHED)
从这里你可以注意到PID 26656的进程正在侦听端口56695,进程26655正在连接到该端口。 通过这种方式,您可以确定谁是坏人(只是不要混淆第三行,这表示连接的另一端(goodguy => badguy)。
当你把这个应用到你的案例中时,你会发现系统上的其他进程正在把这些连接保存到你的Apache实例中。
祝你好运!
伊夫
那么,这有一个惊喜的答案。 这是我们在午夜拍摄UFS文件系统快照时出现文件系统问题的原因。
这似乎是由FreeBSD UFS错误引起的。 我们在FreeBSD主机上使用FreeBSD Jails,并使用默认的UFS文件系统。 UFS文件系统很大 – 1.8TB。
每晚一次,我们使用“dump(8)”运行备份。 dump(8)在备份之前创build了文件系统的快照,并冻结了文件系统。 转储应该与文件系统less于2TB,但在我们的情况下失败。 这家伙有同样的问题。
(我把问题部分的答案从这里转到答案部分,stefan,20100608)