具有并发慢速TCP客户端连接的tomcat Java NIO

时间:2016-08-28 10:32:53

标签: java http tomcat servlets tcp

我的讨论

没有NIO:
对于每个keepAlive连接服务器,继续阻塞线程。

使用NIO:
此连接器有几个轮询线程,用于保持所有连接用户的连接活动,而只要数据(新的HTTP请求)可用,就会调用工作线程

现在: 如果我有一个简单的servlet,它将一个100 KB的字符串返回给客户端(浏览器)。

....
String HunderdKBString = "reallylongstring"
PrintWriter out = response.getWriter();
out.println(HunderdKBString);
....

如果连接了1 KB连接的客户端,则接收字符串大约需要100秒 那么java线程将被阻止大约100秒吗?

TCP缓冲区,Java OutputStreamWriter或其他缓冲区如何影响线程阻塞时间?

PS:使用带有oracle JDK 1.7的centos 7中的apache-tomcat-8.0.24。

编辑:如上所述,线程确实被阻塞,缓冲区可以减少线程块时间。如何通过使用这些缓冲区来优化tomcat / OS来减少线程块时间?

如果由于许多连接速度慢的客户端连接到tomcat而导致tomcat正在挨饿,那么在生产环境中如何检测?

1 个答案:

答案 0 :(得分:2)

  

那么java线程会被阻止大约100秒吗?

  

TCP缓冲区,Java OutputStream或Writer或其他缓冲区如何影响线程阻塞时间?

如果缓冲区足够大以容纳发送的数据,则发送线程不会阻塞。