在使用标准组件运行一个简单的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。
答案 0 :(得分:3)
Filip Hanik的"Tomcat Expert Series: Performance Tuning" (2009)是Tomcat中性能调优和稳定性改进设置的绝佳指南。
我发现指南中的以下提示是相关的:
在此处描述的情况下切换到NIO连接器,增加maxThreads和降低connectionTimeout可能会有所帮助。
答案 1 :(得分:0)
方案中是否包含防火墙?这些往往会在一段时间后丢弃空闲的TCP / IP连接,从而给出您看到的行为。