记录一次内存泄漏追踪(一)

简介: 记录一次内存泄漏追踪(一)

一 背景

项目上线后出现jvm内存过高的情况,并且运行一段时间后会出现内存溢出。


二 分析

  1. 查看项目状态

image.png

可以看到现在使用内存已经达到了12g并且没有内存溢出,推测存在内存泄漏情况

  1. 下载jvm内存快照

    • 查看容器中的java进程pid,找到服务的pid

      jps -lv

    • 下载内存快照

      jmap -dump:format=b,file=head.bin pid

  2. 查看内存快照

    通过检查具体的内存使用情况来进一步定位问题
    
    通过visualvm来转入快照
    
    
    

image.png

 
 
注意visualvm要调整识别文件后缀为hprof文件

image.png

 
 准入后我们可以查看具体的快照信息
 
 

image.png

 
 
查看内存各个类型占比

image.png

发现byte[]类型占比较高,char类型占比也比较高,还有int[]类型,并没有看到哪个对象占用内存很高,其实对象本身如果不是实例数太多,也就是被new了很多次,他本身占用内存其实没那么多,但是其中引用的成员变量,如果很大那么就会占用很多内存,而这部分成员变量是存储在堆区的,也就是byte[] char,String等类型。但是这部分占用比例较高的char[]是由谁来引用呢?我们看看下图

image.png

上图就是具体的实例信息,可以看到引用实例与大小,不过很遗憾,从上面并没有看到具体的内容。

## 三 结语

visualvm是很出名了分析jvm内存的工具,但是在这次排查中并没有看到具体的问题点,在问题的追踪过程中,找到了另一个工具MAT,这个工具可以更详细的对内存快照进行分析,下一篇会写MAT工具对内存快照的分析。

相关文章
|
5月前
|
存储 网络虚拟化 索引
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
45 0
|
3月前
|
Ubuntu 架构师 Linux
内存泄露专题(5)动态内存追踪大杀器:bcc
内存泄露专题(5)动态内存追踪大杀器:bcc
42 0
|
3月前
|
架构师 Unix Linux
内存泄露专题(4)mtrace内存追踪
内存泄露专题(4)mtrace内存追踪
34 0
|
监控 Java Android开发
记录一次内存泄漏追踪(二)
记录一次内存泄漏追踪(二)
|
1月前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1
|
2月前
|
存储 编译器 C语言
C语言:数据在内存中的存储形式
C语言:数据在内存中的存储形式
|
1月前
|
存储 C语言
C语言--------数据在内存中的存储
C语言--------数据在内存中的存储
26 0
|
7天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
17天前
|
存储 C语言
数据在内存中的存储2
数据在内存中的存储2
|
17天前
|
存储 编译器
数据在内存中的存储1
数据在内存中的存储