Apache奇怪的错误消息“断开的pipe道”

总是在Apache error.log上收到“(32)Broken pipe:core_output_filter:将数据写入networking”消息。

在apache.conf中设置EnableSendfile Off,EnableMMAP Off但是仍然是一样的。

操作系统:Debian刻蚀

Apache版本:Apache / 2.2.3

启用apache模块:ctions别名auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi dir env fcgid包含mime协商perl php5重写setenvif ssl状态suexec userdir。

谢谢。

既然你已经closures了EnableSendfileEnableMMAP ,那么看起来你已经完成了功课。 这个错误的一般原因是Apache获得了SIGPIPE,当Apache尝试写入另一端closures的套接字时( 这里描述,请看最后一篇文章)。 该postbuild议,远端的用户可以通过按下“停止”或“重新加载”button来触发。 但是,如果您一直看到这些条目的风口浪尖,我认为以下几点更有可能:

  • 客户端连接到Apache,并build立了一堆并行连接。 大多数客户端会这样做,所以他们可以下载多个文件/图像/等。 同时使页面加载速度更快。
  • 客户端闲置,但保持sockets打开。
  • 在某个时候,所有这些套接字在客户端超时。 可能是防火墙或NAT设备杀死了他们,所以你永远不会得到TCP RST或FIN。
  • Apache下一次检查TCP_KEEPALIVE远端时,内核看到套接字被中断,并将SIGPIPE返回给Apache。

如果你有一个繁忙的服务器,我想这实际上是通常和预期的行为。 事实上,即使是Apache的人也不会关心它,因为他们明显地设置了apache.org的LogLevelwarn所以他们甚至不会看到这些消息。 这个消息显然只能在关卡info看到,所以将其更改为notice或更高应防止他们被logging。