当前位置: 首页 > 面试题库 >

如果20秒钟内没有任何活动,tomcat会超时吗?

袁轶
2023-03-14
问题内容

如果我安装了tomcat并从中流传输了一个静态文件,我注意到如果客户端从该套接字“暂停”(停止接收)超过20秒的任何时间,则tomcat似乎
任意 切断 连接(即使请求URI标头包含已收到并且连接仍为“已连接”
[客户端仍然有效])。哪些配置参数控制着它?该文档提到connectionTimeout但仅与初始标头解析和读取请求正文有关,而与读取服务器的响应无关[?]这里是否存在某种不活动超时?

它是可复制的,可以从任何tomcat应用流式传输(大型)静态文件,并通过暂停的客户端(例如test.rb)接收它:

require "socket"
host = "localhost"
port = 8080
socket = TCPSocket.new host,port
url = "/your_webapp/large_static_filename.ext"
request = "GET #{url} HTTP/1.0\r\nHost:#{host}\r\n\r\n"
socket.print request
puts "reading"
response = socket.sysread 1_000_000
puts response.length
puts response[0..300]
puts "sleeping 25" # with 10s or several reads separated by 10s, it is OK
sleep 25
response2 = socket.read
# this should equal the total size, but doesn't...
puts "sum=#{response2.length + response.length}"

它可以与其他服务器配合使用,因此可能无法发挥某种操作系统的作用。它只是普通的Tomcat,因此没有mod_jk或工人在玩…


问题答案:

影响此“非活动超时”的唯一因素似乎是

<Connector port="8080" ... connectionTimeout=30000 /> 设置。

并且仅当它试图将数据“主动发送”到线路上时(但不能因为客户端正在主动拒绝数据或连接丢失而不能这样做)。如果servlet只是忙于在后台执行cpu,然后写入线路(并且它已被内核接收或缓冲),那么没问题,它可以超过connectionTimeout,所以不是this。

我的直觉是Tomcat似乎有一个“内置”(未记录?无法单独指定?)写超时设置,默认为connectionTimeout值,例如(从tomcat来源随机选择):

java/org/apache/tomcat/util/net/NioEndpoint.java
625:            ka.setWriteTimeout(getConnectionTimeout());

现在,这是否是“坏的”尚待解释。TCP通道以某种方式中断(足以停止传输)或客户端在接收到字节,FWIW时“阻塞”之后,就会发生由tomcat进行的连接“断开”操作。

FWIW connectionTimeout设置影响很多事情:

The total amount of time it takes to receive an HTTP GET request.
The total amount of time between receipt of TCP packets on a POST or PUT request.
The total amount of time between ACKs on transmissions of TCP packets in responses.

现在显然也是writeTimeout。

最终结果:我们拥有一个flakey网络,因此它们是“预期的”超时/切断的连接(通过具有不同名称LOL的配置)。



 类似资料:
  • 我有一个Web应用程序,它的web.xml超时为1分钟,但它从未超时过这个值。它对其他值(如5,9,10或25分钟)超时,但从未超时1分钟。这是Tomcat 8的最小会话超时限制吗?

  • 问题内容: 扫描仪可用于读取文本文件,用户输入流等。正如上面明确指出的,我专门使用它来读取用户输入。 使用上面我做的Scanner,因为它“骑乘”了System.in,所以在没有下一个输入时对其hasNext()的调用将导致相关线程被阻塞,直到下一个有数据为止,然后再返回true。我想检查一下,getter风格,下一个有数据,而不是像hasNext()返回那样,下一个有数据。 其他问题通过启动一个

  • 扫描仪可用于读取文本文件、用户输入流等。我专门使用它来读取用户输入,如上文所述。 用我上面做的扫描仪,因为它“骑”System.in,当没有下一个输入时,调用它的hasNext()将导致相关线程阻塞,直到它有下一个数据,当它有数据时返回true。我想检查,getter样式,下一个有数据的天气,而不是像hasNext()返回,下一个有数据的天气。 其他问题通过启动一个线程等待hasNext()来解决

  • 本文向大家介绍有没有做过活动策划,效果如何?相关面试题,主要包含被问及有没有做过活动策划,效果如何?时的应答技巧和注意事项,需要的朋友参考一下 如果没有,说说没做的理由(时间,成本,账号阶段,用户)。 有做就介绍一下整个活动策划流程(活动预案,活动测试,确定细节包括文案图片,执行落地,进行跟进,收尾复盘)。 以及活动效果达到了多少曝光,增加了多少用户。 甚至活动期间出现过哪些问题,比如参与人数少是

  • 这是我的网站。xml文件,它位于WEB-INF/lib中。它指定会话超时为1分钟,但不会在活动1分钟后将用户超时。

  • 我正在寻找一种方法来创建一个嵌入式ftp服务器。我遇到了一个“编写java ftp服务器”的示例,我在本地复制并测试了它,一切似乎都很好。 因此,我继续将该示例部署到一个AWS EC2实例中,然后尝试使用Ubuntu和FileZilla作为客户机访问它,但我一直遇到相同的问题,目录没有列出。我甚至尝试打开实例的所有端口,但仍然得到相同的结果: 我想这可能与主动/被动模式设置有关,所以我在FileZ