JVM调优实战之高频率FullGC

q1871901600 发布于 2024-11-21 40 次阅读


由于项目是在客户内网部署,只能通过运维了解信息,从运维那里了解到系统经常宕机并且有OOM的日志输出,那就可以通过JVM堆内存直接分析出原因了。

jps 查看java进程ID,找到进程id后
jmap -histo 14660  #查看历史生成的实例
jmap -histo:live 14660  #查看当前存活的实例,执行过程中可能会触发一次full gc

堆信息

jmap -heap 14660  //显示出各个生命分代区的现状

导出 堆内存dump

jmap -dump:format=b,file=eureka.hprof 14660

也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)

  1. -XX:+HeapDumpOnOutOfMemoryError
  2. -XX:HeapDumpPath=./   (路径)

可以用jvisualvm命令工具导入该dump文件分析

最终定位到占用内存最大的业务系统的对象,然后通过代码发现有一个地方固定存入大Map到内存当中。优化思路是让这位同学采用ehcache缓存数据,这不会发生OOM,因为ehcache内部实现了LRU算法,会淘汰掉使用频率最少的数据。

参考文章:

JVisualVM的使用教程_jvisualvm使用教程-CSDN博客

一个会写python的Java工程师
最后更新于 2024-11-21