我有一个运行omcat Tomcat 7的Java web应用程序,它带有一个使用mod_jk / AJP的Apache httpd 2.2。
应用程序的一部分是提供文件(最多4MB大小)。 现在,这一切都运行非常平稳,稳定,响应时间短。 但是,在极less数情况下(<下载量的0.1%),下载时间将超过1分钟。 在Tomcat中激活了ThreadStuckValve之后,我可以看到长时间的响应似乎被卡住了
org.apache.tomcat.jni.Socket.sendbb(Native method)
即networkingI / O。 最多这些长时间运行的下载需要5分钟,我强烈怀疑这是因为Apache 2.2默认的300秒钟( http://httpd.apache.org/docs/2.2/mod/core.html,“TimeOut指示”)。
对我来说,这看起来像networking问题。 Apache的超时(如果这是在5分钟的标记踢)表示ACK数据包没有正确传输。 我的问题是什么可能导致这个? 在接收端closures浏览器,但套接字没有正常closures信号? 数据包丢失或其他networking故障在传输? 我在哪里开始解决这个问题?
我们在vmware虚拟化服务器上运行Windows Server 2008-R2上的Tomcat和Apache。
我会开始运行Wireshark,并确认你的理论,客户是行为不端。 如果是这样的话,那么你可以做很多事情来防止这种情况的发生,但是你可以增加智能来更加积极地closures这些连接(Tomcat和Apache)。
还值得注意的是,如果这种不当行为对您的应用程序有重大影响,那么您可能会遇到一些简单的DoS攻击媒介( Slowloris可能是一种可能性,尽pipe这会降低您的应用程序并消失, )。