2010-09-09 15 views
2

當達到我的tomcat(6.0.20)maxThreads限制,我得到預期的錯誤:Tomcat的不過剩TRAFIC恢復

Maximum number of threads (XXX) created for connector with address null and port 80

,然後請求開始掛在隊列中,並最終超時。到現在爲止還挺好。 問題是,當負載下降時,服務器無法恢復,並且永遠處於癱瘓狀態,而不是恢復原狀。

任何提示?

回答

5

考慮改用NIO,那麼你就不需要擔心每個連接1個線程的技術要求。沒有NIO,限制是大約5K線程(5K HTTP連接),然後就這樣吹。藉助NIO,Java將能夠通過單個線程管理多個資源,因此限制要高得多。邊界實際上是可用的堆內存,大約2GB可以達到20K連接。

將Tomcat配置爲使用NIO與將/conf/server.xml中的<Connector>元素的屬性更改爲"org.apache.coyote.http11.Http11NioProtocol"一樣簡單。

+0

我曾經認爲,但我不不知道這是否會損害依賴於ThreadLocal的類,如Spring OpenSessionInViewFilter。 – 2010-09-09 19:59:37

+0

如果這些類寫得很好,它正確地使用'ThreadLocal#remove()',那麼我就不會遇到問題。甚至更多的,HTTP servlet請求的線程已經默認被集中。在現實世界的生產環境中,NIO比標準打開的要多得多。 – BalusC 2010-09-09 20:01:32

+1

@Julio Faerman它不是 – nos 2010-09-09 20:01:41