不朽
不朽
发布于 2024-01-20 / 7 阅读
0
0

jvm内存溢出排查

jvm内存溢出排查

1.导出内存快照

1.系统自动生成内存溢出快照

jar启动命令追加参数:

-XX:+HeapDumpOnOutOfMemoryError

项目下一次堆内存溢出异常,生成文件

java_pidxxxxx.hprof

2.手动导出内存快照

查看服务pid

jps

手动导出内存快照

jmap [options] pid

例子:

# 生成堆转储快照
jmap -dump:live,format=b,file=jmap.bin 12771

#:live: 只打印存活的对象
#format=b:以二进制的格式进行存储
#file=jmap.bin:将文件保存到当前目录,文件名称为jmap.

参数说明:

options参数命令详解

  • no option:不带参数查询进程,就像这样jmap 12271,查看内存中共享对象信息;,类似Solaris pmap命令;

  • heap: 显示java堆详细信息

  • histo[:live] :显示堆中对象的统计信息,加:live值打印存活的对象,如果不加:live则查询所有的对象;

  • clstats:打印类加载信息

  • finalizerinfo:显示在F-Queue队列等待被清理的对象;在发生GC之前某些对象可能要被回收,那么在回收之前,这些对象就会放到F-Queue队列中;清理时会执行对象的finalizer()方法;

  • dump :生成堆转储快照

-h 和 -help 显示jinfo命令的帮助信息。

pid:要打印配置信息的Java虚拟机的进程ID。

2.用ide自带工具profiler分析快照

菜单路径:Profiler->Open Snapshot :选择java_pidxxxxx.hprof文件

视图类型:

热点图(Flame Graph)

这个视图可以帮助您可视化选定线程的调用堆栈,并查看它随时间的变化。栈框架越宽,方法执行时间越长。彩色块显示本地代码、库代码和用户代码。

调用树(Call Tree)

此视图显示方法使用的 CPU 时间百分比、应用程序中的方法执行路径以及总采样计数。调用树对于快速概述应用程序活动并检测关键执行路径非常有用。

方法列表(Method List)

此视图显示在分析数据时执行的方法列表。它们都按累积采样时间排序。每个所选的方法都有几个视图,可以向您显示该方法的调用者或被调用者。

时间轴或(Timeline)

时间轴是线程活动随时间的视觉表示。它有助于检测异常的 GC 活动、多线程问题(例如死锁)等。

事件(Events)

此视图显示与 JVM 事件相关的数据,例如类加载、垃圾回收、操作系统事件等等。


评论