【视频笔记】十分钟学会排查线上JVM内存溢出

启动应用

 

prometheus配置

prometheus的抓取任务

 #配置内存溢出时dump及dump的目录

nohup java -Xms200m -Xmx200m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/jdk/dump -jar integation-mybatis-0.0.1-SNAPSHOT.jar > /usr/jdk/error.log &

 测试缓存500万个对象

 要有监控预警

代码溢出之前,一般会不停的gc了,gc是很消耗cpu的,这时候整个系统的响应也会变慢

调用消耗缓存的接口后,内存占用开始满了

 cpu也是增高的

 服务器日志,有OutOfMemoryError

 指定的dump文件里生成了hprof文件

 

MAT工具(Eclipse Memory Analyzer Tool)
Dominator Tree: List the biggest objects and what they keep alive 最大的对象给你列出来

 #自己实际使用情况,很多时候,是没有这种很明显的大对象的,一般占用很大的事char[],byte[] 这种,稍好一点的情况是string类型的,里面还能看到一些字符串内容,但也不一定能看到占比很大的那种

线程一定要取名字,有时也可以方便通过有问题的线程来找到代码

 

问题二: 内存升高

重启进程后,

 


jps 查看应用进程号
jmap获取dump文件
jmap -dump:format=hprof,file=/usr/jdk/dumpfile.hprof [pid]
http://ip:port/actuator/heapdump

 

自己平时有使用spring配置的heapdump那种导出

 

参考: 十分钟学会排查线上JVM内存溢出_哔哩哔哩_bilibili

posted @ 2025-05-12 21:52  fanblog  阅读(23)  评论(0)    收藏  举报