通过 MAT 分析 Java 程序内存问题

本贴最后更新于 585 天前,其中的信息可能已经时移俗易

查看程序内存占用

kubectl top pod -nsky

image

进入目标容器

kubectl exec -it -nsky <pod名称> bash

image

获取 java 程序进程号

jps

​​image​​

保存堆栈信息

jmap -dump:live,format=b,file=<文件保存位置> <java进程号>

image

通过 MAT 分析内存

pipeline 分析案例

1、通过 MAT 打开堆栈信息

2、打开自动生成的内存溢出分析

image

发现 ConcurrentSkipListMap 占用了大量内存

image

点开 detail

image

单击大对象

image

选择 List objects->with incoming references 查看持有该对象引用的对象

image

发现有很多的 grpc channel 对象

image

查看代码发现重复创建 channel

image

bug fixed

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • shaolq

    好贴,点赞一下嘿嘿

    希望分享更多的 MAT 分析 Java 程序的文章,我想多学习学习