PermGen OutOfMemory问题排查

简介: PermGen OutOfMemory问题排查

一、问题现象

某个服务接口报超时告警,查看应用日志,发现大量PermGen OutOfmemory,怀疑是Perm区内存不足,使用jmap -heap <pid>,查看JVM Perm区分配情况,发现Perm区设置了最大80M,使用率接近100%。

使用jmap -dump:live,format=b,file=/tmp/heap.hprof <pid>导出JVM堆内存信息,查看堆内存发现有很多JSONObject。

二、解决方案

  • 临时提高PermSize和MaxPermSize参数,-XX:PermSize,-XX:MaxPermSize
  • 进行代码优化,减少动态类生成,如果必要进行动态类生成的,注意避免不必要的引用,因为不必要的引用会导致无法被垃圾回收。

三、原理分析

Perm区在JVM中主要存储类的相关信息,例如静态变量、方法信息等,除了JVM启动时加载的类信息,通过反射生成的动态类信息也会存放在这个区域,而这恰恰经常是容易忽略的点。

Perm区也是受垃圾收集控制的,当加载类的类加载器实例变为不可达时,其加载的类型将会被垃圾收集回收释放。


相关文章
|
5月前
|
监控 Java
OutOfMemory
【7月更文挑战第4天】
61 2
|
7月前
|
监控 网络协议 NoSQL
java线上排查OOM内存溢出
java线上排查OOM内存溢出
263 1
|
7月前
|
安全 IDE Java
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
409 0
|
存储 Java 应用服务中间件
JVM各种情况内存溢出分析
JVM各种情况内存溢出分析
234 0
|
SQL 存储 Java
【问题处理】—— 一次内存溢出(OutOfMemoryError)实战排查
【问题处理】—— 一次内存溢出(OutOfMemoryError)实战排查
300 0
|
IDE Java 开发工具
JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】
JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】
118 0
|
Java fastjson 数据库
线上环境内存溢出-OutofMemoryError
公司线上环境,出现内存溢出异常,发生时,cpu占用360%。系统可用内存不足。
279 1
线上环境内存溢出-OutofMemoryError
浅析JVM几种常见OOM异常原因及解决方案(下)
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM) 异常的可能。
|
存储 Java Linux
浅析JVM几种常见OOM异常原因及解决方案(上)
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM) 异常的可能。
|
监控 Java 数据安全/隐私保护
JVM频繁GC内存溢出排查
GC(Garbage collection)频繁和堆内存溢出原因简单来说是对象占用堆空间难以回收,新对象无法分配触发GC或者直接导致内存溢出,最终进程结束。
475 0