CLOSE_WAIT连接的Tomcat行为

时间:2015-10-20 19:09:45

标签: java tomcat tcp server

acceptCount队列维持在操作系统级别。假设我们有一个10K的acceptCount队列。

情况 - 由于其中一个依赖关系或网络问题以及所有客户端超时期间,服务器无法处理请求或需要很长时间。最终队列有10K CLOSE_WAIT连接。现在,如果该服务再次备份并开始处理。它会清理CLOSE_WAIT连接队列吗? tomcat如何在这种情况下表现。

2 个答案:

答案 0 :(得分:1)

关于CLOSE_WAITS并达到最大连接数/线程数的一些提示, (我在WebLogic服务器中遇到过类似的问题,但这些是一般提示)

由于网络问题而释放卡住的线程:(如果根据业务允许)

  1. 为所有远程调用设置超时值(例如DB / HTTP / EJB /..)
  2. 检查终止/终止长时间运行的线程(请求)
  3. 在尝试任何变通方法之前,请仔细检查并找到根本原因。

    CLOSE_WAITS应该在重载期结束后清除以防这是问题,但是如果线程卡住,您可能需要尽快重启以解决问题。

答案 1 :(得分:0)

  

acceptCount队列维持在操作系统级别。

通过这个我假设你的意思是监听积压队列。

  

假设我们有一个10k的acceptCount队列。

没有办法说出来。你可以提示到操作系统你希望它多长时间,但操作系统可以上下调整它,并且没有API告诉你实际长度是多少。 / p>

  

最终队列有10k CLOSE_WAIT连接。

不,不。 CLOSE_WAIT状态不会在任何地方排队,并且侦听backlog队列与CLOSE_WAIT无关。

  

它会清理CLOSE_WAIT队列吗?

没有这样的队列可以清理。

如果您真正要求的是重新启动该过程,请清除处于CLOSE_WAIT状态的所有端口,答案是退出持有它们的进程将执行此操作。

然而,让Tomcat检测到所有已关闭的连接并自行关闭它们也是如此。如果你有很多这样的话,真正的问题就是为什么它没有自动完成。它应该。

如果这是由某个请求转发到某个地方引起的,那么在您的应用程序中,它听起来像是内部同步的,不应该同步。