Grails + Tomcat + Ubuntu问题:CLOSE_WAIT连接

时间:2010-03-03 20:13:42

标签: java tomcat grails ubuntu tomcat6

在使用标准组件运行一个简单的Grails应用程序时,我在生产中遇到了一个非常奇怪的稳定性问题。

经过一段时间的正常操作后,状态jsvc中的Tomcat(CLOSE_WAIT)TCP连接数增加,直到Tomcat达到其线程上限(Maximum number of threads (N) created for connector),之后Tomcat将研究到停止。

通常,这表示应用程序包含未正确关闭其TCP连接的代码。但是,我在这个应用程序中的Grails代码实际上非常简单,并且不会自行启动任何TCP连接,因此我无法想到我的代码可能导致CLOSE_WAIT问题的任何情况。

此外,堆栈中的所有组件都是我认为没有bug的标准内容;我在Ubuntu 9.1(apt-get install tomcat6)中捆绑的标准Tomcat 6下运行Grails 1.2.1。

  • 这是一个已知的问题吗?
  • 你会如何解决它的问题呢?

2 个答案:

答案 0 :(得分:3)

Filip Hanik的"Tomcat Expert Series: Performance Tuning" (2009)是Tomcat中性能调优和稳定性改进设置的绝佳指南。

我发现指南中的以下提示是相关的:

  • 调整选项概述:线程,保持活动,TCP Backlog(acceptCount),connectionTimeout,套接字缓冲区,连接器:BIO与APR与NIO(第24页)
  • 如何在BIO / APR / NIO连接器之间进行选择(第26-32页)
  • 调整maxThreads(第33-34页)
  • 调整maxKeepAliveRequests(第35-36页)
  • 调整acceptCount(第37-38页)
  • 调整connectionTimeout(第39-40页)
  • 调整JVM设置(第44-50页)

在此处描述的情况下切换到NIO连接器,增加maxThreads和降低connectionTimeout可能会有所帮助。

答案 1 :(得分:0)

方案中是否包含防火墙?这些往往会在一段时间后丢弃空闲的TCP / IP连接,从而给出您看到的行为。