1

我在使用 JVM 堆时遇到了问题。

我们使用 Apache HTTP Server 和 Apache Tomcat Application Server 运营一个网站。

所有对 Apache HTTP 服务器的 *.jsp 请求都将被重定向到 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$Segment[]

org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148

org.apache.jasper.servlet.JspServlet


GSA 请求是否存在问题?

为什么JVM不能卸载生成的类?

4

1 回答 1

1

看起来加载所有 JSP 会导致问题。

默认情况下,Tomcat 将所有已加载的 JSP 保存在内存中,直到 Web 应用程序停止。

在 Tomcat 7 中,您可以设置 JSP Servlet 的 maxLoadedJsps 参数来限制内存中保存的 JSP 的数量。

于 2012-05-03T18:55:23.840 回答