当前位置: 首页 > 知识库问答 >
问题:

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

常雅珺
2023-03-14

我的未插入

如果没有NIO:
对于每个保持Alive连接,服务器会继续阻塞一个线程。

使用NIO:
此连接器有几个轮询线程,用于为所有连接的用户保持连接活动,同时每当数据(新的HTTP请求)可用时都会调用工作线程

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

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

如果具有1 KB连接的客户端连接,则需要大约100秒来接收字符串<那么java线程会被阻塞大约100秒吗?

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

PS:在centos 7中使用apache-tomcat-8.0.24和oracle JDK 1.7。

编辑:如前所述,线程确实被阻塞,缓冲区可以减少线程阻塞时间...如何乐观地使用tomcat/OS来减少线程阻塞时间?

如何在正式生产环境中检测tomcat是否由于连接到它的许多慢速连接客户端而导致线程饥饿?

共有1个答案

谷玉韵
2023-03-14

那么,java线程是否会被阻塞大约100秒?

是的。

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

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

 类似资料:
  • 我使用这个(Android TCP连接增强的)教程来创建简单的JAVA TCPServer和Android TCPClient。它工作得很好,但使用这段代码我只能同时将一个设备连接到服务器。我必须更改什么才能连接多个设备?

  • 问题内容: 我使用nodejs(net module )在客户端和服务器之间创建了tcp连接。服务器正在侦听已经预定义的端口,而客户端正在连接到该端口。 据我了解,客户端的端口是由节点动态分配的?那是对的吗? 哪种算法节点用于为客户端分配“随机”端口?它是如何工作的,是由节点还是由操作系统决定的? 是否可以定义将要使用哪个客户端的静态端口?是否可以定义供客户端使用的端口范围? 注意:我想我之前在找

  • 我正在编写一个使用tcp套接字的服务器/客户端应用程序,我的问题是如何检测半开放连接,我计划使用keep-alive但有些人建议我做我自己的协议,所以我现在的计划是: 在服务器端: 服务器会等待10秒等待客户端发送数据,如果在给定的时间内服务器没有收到客户端的消息,服务器会将客户端标记为断开连接,否则,如果服务器收到客户端的消息,则会重新设置计时器。 我现在的问题是,这样行吗?还是我做错了?还是一

  • 我正在尝试通过 tcp 连接远程执行程序,我想在客户端之间实时共享标准输出和标准输出 我有以下没有错误处理的测试服务器:p我知道,目前我无法执行带有参数的程序,但这很容易处理:) 你看,我尝试与 c.Write() 共享标准输出,但这不起作用。 我认为cmd.Stdin的另一个问题将与Stdout的问题相同。此时我没有实现任何标准函数。 有人能给我一个关于这个函数的提示或示例代码吗?

  • 我正在使用C#window应用程序表单对TCP多线程服务器进行工作,我正在尝试检测客户端的机器是否关闭并断开与服务器的连接。看了一些帖子,有了一些想法: 如何确定tcp是否连接? 我的代码如下: 多谢帮忙。

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。