当前位置: 首页 > 知识库问答 >
问题:

JVM堆转储:内存积累在“java.util.concurrent.concurrentHashMap$segment”的一个实例中

司马辉
2023-03-14

我在JVM-heap上遇到了麻烦。

我们使用Apache HTTP服务器和Apache Tomcat应用服务器操作一个网站。

所有对Apache HTTP服务器的*.jsp请求都将重定向到Tomcat服务器(协议:ajp)。

以下是eclipse Mat的报告:

由“org.apache.catalina.loader.StandardClassLoader@0x7092C5148”加载的“org.apache.jasper.servlet.jspServlet”实例占用1'189'603'328(96.75%)字节。

内存积累在由“”加载的“java.util.concurrent.concurrentHashMap$segment[]”的一个实例中。

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

jorg.apache.jasper.servlet.JSPServlet

GSA请求/S有问题吗?

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

共有1个答案

莘昊
2023-03-14

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

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

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

 类似资料:
  • 每个人都知道可以从正在运行的JVM中获得堆转储。另一种方式可能吗?我们可以使用堆转储来启动JVM吗? 这个问题我已经想了很久了。如果这是可能的,它将解决大量的时间,并使支持工程师容易思考。如果我们必须重新创建一些我们的客户所面临的罕见的问题,那么它就会大有帮助。[假设底层硬件和Java运行时是相同的,并且所有的支持文件也存在于文件系统中各自的位置]。 添加注意:这样做的意图不是在OOM发生时,而是

  • 我并不了解Java特别是Java调试,但在Jenkins中使用Monitoring进行堆转储,然后在Eclipse中使用MAT对其进行解码,显示总内存使用量为169.4MB,而在Jenkins中Monitoring似乎经常使用内存,GCs也经常运行。-XMX是4G。 为什么我只有169.4MB的mat?可能是因为在进行转储之前,Jenkins执行了GC吗?如果是,我是否可以避免它以看到完整的内存转

  • 我们Java开发人员有时会使用来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗? 此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容? 提前感谢。

  • 问题内容: 我们在 Tomcat 服务器上部署了一个Web应用程序。我们运行某些计划的作业,然后堆内存达到峰值并稳定下来,一切似乎都很好。但是,系统管理员抱怨内存使用率(Linux上的“ top”)随着计划的作业的增加而不断增加。堆内存和CPU内存之间有什么关联?可以通过任何JVM设置来控制它吗?我使用 JConsole 监视系统。 我通过JConsole强制进行垃圾收集,并且堆使用率下降了,但是

  • 我在Kubernetes集群上运行了一个openjdk:8映像。我添加了内存HPA(水平Pod自动缩放),它可以很好地扩展,但由于JVM不会将内存从堆释放回操作系统,所以Pod不会缩小。以下是hpa。亚马尔 解决这个问题的一种方法是使用正确的GC并使其释放内存,但由于JVM被设计为不经常从堆中释放内存,因此这样做不是一个好主意。库伯内特斯有没有办法解决这个问题?就像不检查操作系统的内存使用情况一样

  • 问题内容: 我在JVM(Scala)中构建了一个庞大的图形,我想反复使用它来调整算法。我不想每次都从磁盘重新加载它。有没有办法让它坐在一个JVM中,而又与另一个正在开发算法的JVM连接呢? 问题答案: 将图形保存到磁盘,然后使用MappedByteBuffer将其映射到内存。两个进程应使用相同的内存,该内存将与页面缓存共享。