首页 > 解决方案 > Apache2:如何记录被拒绝的连接和客户端超时

问题描述

我正在对使用 Apache2 运行的服务进行一些负载测试,我的负载测试工具的默认超时为 30 秒。当我以每秒 1 个请求的负载运行该工具一分钟时,它报告 40 个成功并获得 200 个 OK 响应,并且 20 个请求被取消,因为在等待标头时超出了客户端超时。

现在,我试图在服务器端发现这一点。我看不到 apache 访问日志或 gunicorn 访问日志中记录的超时。请注意,我对未接受的连接以及已接受和超时的连接感兴趣。

我有一些在 Windows 上处理类似服务的经验。http.sys 错误日志将显示连接断开错误,我们会知道我们的服务器是否正在断开连接。

标签: apache2http.sys

解决方案


当客户端超时时,服务器只知道客户端已中止连接。在mod_log的 config中,%X格式说明符用于在请求完成后记录客户端连接的状态,这正是您在这种情况下想要知道的。

来自 mod_log 的配置文档的屏幕截图

将您的日志配置为使用%X,并在日志行中查找该X字符。

奖励:我什至在 20 年前的 apache 开发论坛中找到了有关此功能的讨论

更新: 关于被拒绝的连接,这些不能被 apache 记录。拒绝连接是由内核在 tcp 堆栈中完成的,而不是由 apache 完成的。我能想到的最接近的解决方案(仅包括 apache)是跟踪打开连接的数量(使用mod_status)。如果它达到最大值,您知道您可能会拒绝连接。否则,您需要设置一些监控解决方案来跟踪内核发送的 tcp 重置。


推荐阅读