我與JVM堆麻煩
我們經營與Apache HTTP服務器一個網站和一個Apache Tomcat應用。服務器
所有* .JSP請求Apache HTTP服務器將被重定向到Tomcat服務器(協議:AJP)。
該網站擁有超過10,000 jsp文件
我們有也谷歌搜索設備,它爬行網站每晚。
雖然它爬行時,JVM堆空間上升到8 GB的最大限制。
隨着javamelody,我可以看到堆空間增加模擬到加載的類。
對於分析我採取了堆轉儲。
下面是從蝕MAT報告:
一 「org.apache.jasper.servlet.JspServlet」 的例如通過加載 「org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148」 佔用1個'189'603'328(96.75%)字節。
該存儲器中的「$ java.util.concurrent.ConcurrentHashMap中段[]」通過「」加載一個實例積累。
關鍵詞
java.util.concurrent.ConcurrentHashMap中的$段[]
org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148
org.apache.jasper.servlet.JspServlet
是否與GSA的請求/ s的問題?
爲什麼JVM無法卸載生成的類?
這顯示1.1GB的堆使用。這是消費記憶的唯一主要部分嗎? – Sean
是的,這是唯一的一個。我手動停止了GSA採取堆轉儲,所以這個原因,爲什麼它不是很大。我上週也拿了一個,然後是3.8 GB。 – user1373150
我不會停止GSA採取堆轉儲。如果你這樣做,一些資源可能會被釋放,然後你的堆轉儲不會告訴你整個故事。你在日誌中看到內存不足異常嗎?如果是這樣你可能要添加的啓動參數HeapDumpOnOutOfMemoryError http://stackoverflow.com/q/542979/425406 – Sean