當達到我的tomcat(6.0.20)maxThreads限制,我得到預期的錯誤:Tomcat的不過剩TRAFIC恢復
Maximum number of threads (XXX) created for connector with address null and port 80
,然後請求開始掛在隊列中,並最終超時。到現在爲止還挺好。 問題是,當負載下降時,服務器無法恢復,並且永遠處於癱瘓狀態,而不是恢復原狀。
任何提示?
當達到我的tomcat(6.0.20)maxThreads限制,我得到預期的錯誤:Tomcat的不過剩TRAFIC恢復
Maximum number of threads (XXX) created for connector with address null and port 80
,然後請求開始掛在隊列中,並最終超時。到現在爲止還挺好。 問題是,當負載下降時,服務器無法恢復,並且永遠處於癱瘓狀態,而不是恢復原狀。
任何提示?
考慮改用NIO,那麼你就不需要擔心每個連接1個線程的技術要求。沒有NIO,限制是大約5K線程(5K HTTP連接),然後就這樣吹。藉助NIO,Java將能夠通過單個線程管理多個資源,因此限制要高得多。邊界實際上是可用的堆內存,大約2GB可以達到20K連接。
將Tomcat配置爲使用NIO與將/conf/server.xml
中的<Connector>
元素的屬性更改爲"org.apache.coyote.http11.Http11NioProtocol"
一樣簡單。
我想可能是在Tomcat中,並根據問題的錯誤:
https://issues.apache.org/bugzilla/show_bug.cgi?id=48843
應固定在Tomcat的6.0.27和30年5月5日
我曾經認爲,但我不不知道這是否會損害依賴於ThreadLocal的類,如Spring OpenSessionInViewFilter。 – 2010-09-09 19:59:37
如果這些類寫得很好,它正確地使用'ThreadLocal#remove()',那麼我就不會遇到問題。甚至更多的,HTTP servlet請求的線程已經默認被集中。在現實世界的生產環境中,NIO比標準打開的要多得多。 – BalusC 2010-09-09 20:01:32
@Julio Faerman它不是 – nos 2010-09-09 20:01:41