为什么tomcat8 NIO连接器在20秒内对某些tcp连接没有任何动作?

时间:2016-07-20 19:55:34

标签: tomcat nio blocking nonblocking

我正在使用JMeter 2.13的HttpClient4发送帖子请求,将2MByte文件上传到我的Tomcat8网络应用程序。此外,httpclient.cps设置为128000(1Mb / s)以模拟慢速网络,并且有一个ConstantThroughputTimer来控制吞吐量。吞吐量大约是每秒15个请求。

几分钟后(可能是10,15等)有一些套接字超时。来自pcap文件 (http://sabercathost.com/35MD/tcpTimeout.pcap),我看到整个文件差不多完成了(整个文件的大小是2097152字节)但是客户端在20秒内什么都不做,这是tomcat连接的超时设置。

可能是什么原因? 它是ConstantThroughtputTimer的调度程序吗? JVM线程调度程序? 还是HttpClient4?

编辑:我刚刚将客户端发送的最后一个数据包与其他获得200OK的pcap进行了比较,我看到没有区别 - 两者都以多部分边界结束,只有成功者从服务器获得响应。现在我认为这是网络应用程序的问题。

编辑:我怀疑这个问题是由Tomcat8的NIOConnector引起的,我将连接器更改为BlockingIO,现在它完美运行,没有时间。此外,在服务器端收到文件的块后,它开始 写入NFS文件系统,当使用NIO时,IOWait大多非常低(接近0%)然后突然降至10%,现在使用BIO,IOWait是常量。

正如我上面提到的,服务器端收到整个文件,但有时它没有永远回复200OK。从JVisualVM我没有看到任何阻止。很难说它是NIOConnector或网络应用程序。

0 个答案:

没有答案