下载文档时间歇性极长的响应时间

下载文档时间歇性极长的响应时间

我有一个在 Tomcat 7 上运行的 Java Web 应用程序,其中 Apache httpd 2.2 以 mod_jk/AJP 为前端。

应用程序的一部分是提供文件(最大 4mb)。现在,通常情况下,这一切都运行非常顺畅,响应时间稳定且短。然而,在极少数情况下(<0.1% 的下载),下载时间会超过 1 分钟。在 Tomcat 中激活 ThreadStuckValve 后,我可以看到长响应似乎卡在

org.apache.tomcat.jni.Socket.sendbb(Native method)

即网络 I/O。这些长时间运行的下载最多需要 5 分钟,我强烈怀疑这是因为 Apache 2.2 中的默认 300 秒超时(http://httpd.apache.org/docs/2.2/mod/core.html, “TimeOut 指令”)。

在我看来,这看起来像是网络问题。Apache 超时(如果这是在 5 分钟时发生的)表示 ACK 数据包未正确传输。我的问题是这是什么原因造成的?接收端的浏览器已关闭,但套接字未正确发出关闭信号?传输过程中出现数据包丢失或其他网络故障?我应该从哪里开始排除此故障?

我们在 vmware 虚拟化服务器中的 Windows server 2008-R2 上运行 Tomcat 和 Apache。

答案1

我会先运行 Wireshark,确认你的理论,即客户端行为不当。如果是这样的话,你几乎无能为力防止但是你可以添加智能来更积极地关闭这些连接(在 Tomcat 和 Apache 上)。

还值得注意的是,如果这种不当行为对你的应用程序产生重大影响,你很容易受到一些简单的 DoS 攻击媒介(慢蜂我想到了一种可能性,但某些东西进入你的应用程序然后消失可能会更有效)。

相关内容