侧边栏壁纸
  • 累计撰写 22 篇文章
  • 累计创建 10 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

JVM 内存排查

AF
AF
2023-11-08 / 0 评论 / 0 点赞 / 49 阅读 / 4014 字

是否内存泄漏:

1)老年代逐步增长?

2)FullGC卡顿?

3)年轻代的内存一直在高位无法释放?

4)频繁Full GC?

5)资源关闭?(IO流不关闭会内存泄漏吗?不会的,但是会频繁GC,如果关闭,内存会缓慢上涨,然后触发一次fullGC(推荐),文件句柄也会存在对应的内存哦!)

常用命令:

1)查看资源使用情况

2)jstat -gc <pid> 查看java进程的GC状态

S0C:第一个幸存区的大小

S1C:第二个幸存区的大小

SoU:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法区大小

MU:方法区使用大小《

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

3)top -Hp <pid> 可以查看该进程下各个线程的cpu使用情况

4)jstack <pid> 查看当前java进程的堆栈状态,例如: jstack 1420 | grep -A 10 'printf "%x\n" 1477'

5)jmap -histo:live <pid> 查看存活的对象情况

6)jinfo <pid> 查看进程配置信息

7)jmap -dump:live, format=b,file=heap.hprof <pid> 下载dump文件在本地进行分析,使用像MAT工具进行打开


①堆内内存泄漏排查 (推荐heapDump在线分析工具:heaphero)

heapDump文件生成:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E://temp.hprof

将temp.hprof 上传到https://heaphero.io/heap-index.jsp 我们将文件上传到HeapHero进行分析(文件大的话最好压缩为zip格式)

打印垃圾回收信息:

jstat -gcutil <pid> 2000 10 (每2秒打印一次,一共打印10次)

查看堆内存中的实例数量以及内存大小情况:

默认按照占用内存大小降序排序

jmap -histo <pid>

jmap -histo <pid> | head -30 (取内存占用最高的前三十个对象)

jmap -histo <pid> | sort -k 2 -g -r | head 30(按实例数量降序排序取前三十)

jmap -histo 1 <pid> | grep redisson | sort -k 2 -g -r | head 30 (按照实例数量降序排序取前三十,在内容中搜索redisson)

#instance 是对象的实例个数

#bytes 是总占用的字节数

#class name 对应的就是Class 文件里的class的标识

B 代表 byte

C 代表 char

D 代表 double

F 代表float

I 代表 int

J 代表 long

Z 代表 boolean

前边有[ 代表数组,[I 就相当于 int[]]

0

评论区