2011-10-27 69 views
2

ThreadLocal會導致Glassfish服務器中的內存泄漏,就像它在Tomcat中泄漏一樣?爲什麼? http://wiki.apache.org/tomcat/MemoryLeakProtectionGlassfish中的ThreadLocal內存泄漏

+0

嗯......你鏈接到的頁面說這個問題在Tomcat 7.0.6中修復。對你來說不夠好嗎? –

+0

@Stephen對於靜態類變量,它未被檢測到,並且修復默認爲關閉。而且,我問這個問題大多是爲了知道爲什麼?不用於選擇要使用的服務器。無論如何,感謝您的評論。 – tanyehzheng

+0

1)你沒有詢問關於靜態變量 - 你問了關於ThreadLocal泄漏。 2)您可以輕鬆地打開一個非默認修復程序。 –

回答

1

是的,它會泄漏,並根據這個相對較新的Glassfish的JIRA問題的Glassfish甚至不會向您發出警告:

http://java.net/jira/browse/GLASSFISH-14128

需要然而,可以說那是什麼ThreadLocal的特定泄漏是而不是應用程序/ Web服務器本身的「錯誤」,但是這些容器中運行的組件中的代碼存在問題(無論這些組件是servlet,會話bean還是其他組件)。

什麼樣的應用程序服務器/ Web容器試圖在一般情況下阻止開發人員編寫大量維護代碼並使他專注於業務邏輯。然而,他需要對應用服務器的工作原理(線程池,類加載器,部署/解除部署機制等)有所瞭解,以便正確或避免此類ThreadLocal問題。這並不總是容易,而且可能非常棘手。我記得有關Glassfish中的內存泄漏問題?與使用自定義日誌級別有關。

Apache Tomcat的功能是它有一個輔助機制來警告用戶/處理用戶代碼中的一些常見的內存泄漏問題。但即使在問題提供的鏈接中,您也可以閱讀並非所有可能的ThreadLocal內存泄漏都是使用此機制自動完成的。

Glassfish似乎還沒有此功能。

+0

謝謝MarianP .. – tanyehzheng

+1

看看這個http://stackoverflow.com/questions/6847580/i-need-help-finding-my-memory-leak-using-mat – Preston