生产排查jvm内存溢出问题的高效方式:
需要工具:VisualVm2.0.3、百度搜索下载arthas可以找到阿里旗下的arthas官网(arthas里的jar包下载到服务器某个目录下)
1、curl -O https://arthas.aliyun.com/arthas-boot.jar
2、然后执行命令(java -jar arthas-boot.jar)
3、执行jar包命令后会出现服务器上所有的jar包,选择1或者2等选择需要查看的应用jar包,然后enter回车就会进入arthas用户下查看具体的jvm
4、输入dashboard 仪表看可以看到生产的堆栈原空间等信息,看不到具体的类
5、把具体的jvm内存信息下载成.hprof的文件,命令:heapdump /tmp/dump-1.hprof (下载到文件服务器的tmp目录下后再下载到本地用VisualVm工具分析)
6、下载好VisualVM工具,在bin目录下找到,打开VisualVM.exe,加载dump-1.hprof文件分析
7、主要看哪个类在占用的内存最大,找到最大的的类右键在新的标签页打开,会出现很多节点,只需要随机取第一个节点选中,点击按钮GC Root,查看根节点
这时候就能看见哪个类有问题,然后再选中这个类,右键select in threads,既可以查到这个类应该的方法报错,然后根据本地代码去排查
8、排查完成后,再用VisualVM监控下当前应用,看看Sampler样例的Memory内存的Heap堆的列表图里内存实时的使用情况,执行一次GC,看看内存是否可以回收
如果可以回收,既问题解决,之前的是因为没有关闭OSS连接所以无法回收,关闭后就可以回收了,堆内存就恢复正常。
生产排查jvm内存溢出问题的实战方式(具体到定位某个方法)
最新推荐文章于 2025-05-21 19:58:58 发布
文章介绍了如何使用VisualVm和阿里云的arthas工具来诊断和解决JVM内存溢出问题。首先通过arthas选择目标应用,然后使用dashboard查看堆栈信息,生成.hprof文件进行详细分析。在VisualVm中,找出占用内存最大的类,通过GCRoot查找问题根源,如果是未关闭的OSS连接导致,则关闭后可解决内存无法回收的问题。
6764

被折叠的 条评论
为什么被折叠?



