当前位置:首页 > 内存 > 正文

jvm内存溢出故障排查

  • 内存
  • 2024-06-08 05:40:49
  • 5560

一、JVM内存溢出的两大类型及解决方案

你知道如何解决JVM内存溢出问题吗?这里给大家分享一下,JVM为开发者管理的内存堆和非堆两种类型。以上是JVM启动时创建一个非堆供JVM本身用来存储类信息

JVM内存溢出详细解决方案

JVM内存溢出的类型

JVM内存溢出的类型

javalangOutOfMemoryError:PermGenspace

JVM管理的Java内存有堆和非堆两种类型。堆由开发人员使用。上面提到的是非堆是在JVM启动时创建的。它是为JVM本身保留的,用于存储类信息。GC在堆执行的不同时期不会释放空间。如果webapp使用大量的第三方jar或者应用程序的class文件太多而MaxPermSize设置太小,也会造成这个内存问题。太忙,导致JVM内存溢出或者Tomcat热部署时,不会清理之前加载的环境,只会用新部署的非堆栈内容改变上下文。

PermGenspace的全称是PermanentGenerationspace,指的是内存的永久存储区域。这块内存主要被JVM用来存储类信息,当Loader加载时,meta会被放置在PermGenspace中。它与存放类的实例(Instance)的Heap区不同。GC(垃圾收集)则不同。PermGenspace在主程序执行过程中会被清理,所以如果应用程序中有很多CLASSES,就会出现PermGenspace错误。这个错误很可能发生,常见于web服务器准备JSP的时候,如果你的WEBAPP使用了大量的第三方jar的大小超过了jvm默认的大小(M),就会产生这个错误信息

一个更好的配置示例(经我验证,自从使用此配置后,Tomcat从未死机)

setJAVA_OPTS=Xmsm

javalangOutOfMemoryError:Javaheapspace

我们来看第二种JVM内存溢出的情况。第一种情况是补充。主要问题是在这种情况下它的默认空间(即.如果剩余内存超过%,JVM就会将堆收缩到Xms设置的值,然后是Xmx。服务器机器在g和g之间,但位大小不是。有一个限制

GC垃圾收集的作用

JVM调用GC的频率还是很高的。垃圾收集主要在两种情况下进行

当应用程序线程空闲时和另一种是Java内存堆不足时。如果连续回收不能解决内存不足的堆问题,就会报内存不足的堆错误,由于这种异常是由系统的运行环境决定的,所以无法预测它何时会出现。根据GC机制,运行程序会导致系统工作环境的变化增加GC触发的可能性

lishixinzhi/Article/program/Java/hx/201311/26579