2014-02-12 44 views
4

我們一直在我們的Web應用程序之一有OutOfMemory。此應用程序在Elastic Load Balancer後面的Aamzon EC2上的Tomcat上運行。從堆轉儲中,大部分內存都被SocksSocketImpl對象佔用。 Yourkit顯示99%的這些對象處於「待定」狀態。但是,不知何故,它們並沒有被最終確定和GC化。在其他地區具有相同設置(相同的Tomcat版本和JDK版本)的相同應用程序,並且沒有問題。內存泄漏與SocksSocketImpl敲定方法

有沒有人見過這種行爲?任何指針都會有幫助。謝謝你的時間。

+0

您是否已檢查/監控您的流量模式?也許你的應用程序有內存泄漏正在接收更多的流量。 – Rico

+0

感謝您的回覆,Rico。交通不是問題。堆上的Socket對象數量超過全天流量的50%。我們也按小時分解。過度的流量絕對不是原因。 – Pisupat

+0

奇怪。你看到這一貫?您是否在您遇到問題的地區嘗試過幾次? – Rico

回答

0

升級到JVM 1.7.0_51後,問題得到解決。懷疑,在套接字清理或GC期間,它似乎是JVM級別問題。有問題的版本是1.6.0_30 OpenJDK。

+0

即使使用AWS beanstalk上的1.7.0_51,我也有此問題 – jeremyvillalobos

2

我不得不運行Tomcat 6.0.39完全相同的問題,內存問題啓動時JDK Ubuntu的服務器上,用安全補丁升級爲:

java version "1.6.0_30" 
OpenJDK Runtime Environment (IcedTea6 1.13.1) (6b30-1.13.1-1ubuntu2~0.12.04.1) 
OpenJDK Server VM (build 23.25-b01, mixed mode) 

與Eclipse的內存分析,異形追蹤到的對象的終結器隊列用於SSL連接和Hibernate會話消耗所有內存。問題通過升級來解決:

java version "1.7.0_51" 
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2) 
OpenJDK Server VM (build 24.45-b08, mixed mode)