我遇到了JVM-Heap问题。
我们使用Apache HTTP Server和Apache Tomcat Application Server运营网站。
所有* .jsp对Apache HTTP Server的请求将被重定向到Tomcat服务器(协议:ajp)。
该网站拥有超过10,000个jsp文件。
我们还有一个谷歌搜索设备,它每晚都会抓取网站。
在爬行时,jvm堆空间上升到8 GB的最大限制。
使用javamelody,我可以看到堆空间与加载的类类似地增加。
对于分析我采取了堆转换。
以下是eclipse MAT的报告:
由“org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148”加载的“org.apache.jasper.servlet.JspServlet”的一个实例占用1'189'603'328(96.75%)字节。
内存累积在由“”加载的“java.util.concurrent.ConcurrentHashMap $ Segment []”的一个实例中。
关键字
java.util.concurrent.ConcurrentHashMap中$段[]
org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148
org.apache.jasper.servlet.JspServlet
GSA请求有问题吗?
为什么JVM无法卸载生成的类?
答案 0 :(得分:1)
看起来像加载所有JSP导致问题。
默认情况下,Tomcat会将所有已加载的JSP保留在内存中,直到Web应用程序停止。
在Tomcat 7中,您可以设置JSP Servlet的maxLoadedJsps参数,以限制内存中保存的JSP数量。