Apache error.log 中总是出现“(32) 管道损坏:core_output_filter:正在将数据写入网络”消息。
在 apache.conf 中设置了 EnableSendfile Off、EnableMMAP Off 但仍然一样。
操作系统:Debian etch
Apache 版本:Apache/2.2.3
启用 apache 模块:ctions alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi dir env fcgid include mime negotiation perl php5 rewrite setenvif ssl status suexec userdir。
谢谢。
答案1
由于您已经关闭了EnableSendfile
和EnableMMAP
,看来您已经完成了作业。此错误的一般原因是 Apache 收到 SIGPIPE,当 Apache 尝试写入另一端已关闭的套接字时会发生这种情况(已描述这里,请查看最后一篇帖子)。该帖子建议远端用户可以通过按下“停止”或“重新加载”按钮来触发此操作。但是,如果您一直看到这些条目,我认为以下情况更有可能发生:
- 客户端在某个时刻连接到 Apache,并建立一组并行连接。大多数客户端都会这样做,以便他们可以同时下载多个文件/图像/等,从而加快页面加载速度。
- 客户端处于空闲状态但保持套接字打开。
- 在某些时候,所有这些套接字在客户端都超时了。可能是防火墙或 NAT 设备杀死了它们,所以你永远不会在你的终端收到 TCP RST 或 FIN。
- 下次 Apache 检查远端时
TCP_KEEPALIVE
,内核会发现套接字已破坏,并向 Apache 返回 SIGPIPE。
如果你的服务器很忙,我想这实际上是正常且预期的行为。事实上,甚至 Apache 人员自己似乎也不关心它,因为他们显然将LogLevel
apache.org 设置为warn
他们甚至看不到这些消息(注意这里)。此消息显然仅在级别上可见info
,因此将其更改为notice
或更高级别应可阻止它们被记录。