linux上怎么排查JVM内存过高?

怎么排查JVM内存过高?

前言:

想必工作一两年以后的同学都会逐渐面临到,jvm等问题,但是可能苦于无法熟练的使用一些工具;本文将介绍几个比较常用分析工具的使用方法,带着大家一步步定位分析问题。

1、top 查看进程

`

我们来看pid 16160 这个进程占用资源相对来说较高

2、top -Hp pid 查看指定进程下线程

在这里插入图片描述

其实到这一步,我们已经进一步缩小了排查范围了,从如上图所示,我们可以知道,线程22652是一个java的定时任务线程,以及我们资源占用较多的java子线程。

到达这一步我们现在有很多工具可以去详细定位了,介绍几个我平常用的比较多的吧

3,jstack

把16进制转一下10进制

因为Java线程文件中的线程ID是16进制,所以需要将线程PID 从十进制转换成十六进制
命令:
echo "obase=16;161633" | bc
然后转换后输出: 3F23
最后执行 jstack 3F23
如下图已经详细打印了堆栈,自己可以去分析了。

在这里插入图片描述

4,Arthas

这是一个我之前写的jvm分析工具,阿里巴巴的,可以挪步,我个人觉得这个工具更爽
Arthas:https://blog.csdn.net/qq_38420688/article/details/109166153

5,jconsole

6,最后兜底

可以在服务启动的时候加入参数控制系统oom时输出堆栈,便于我们定位问题: -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/**.hprof

参考如下命令:

nohup  java -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/xxx.hprof -jar xxx.jar > info.log &

7,最后奉上大招

一个我也很喜欢用的工具,有些时候可能有些电脑没有环境,无法用自带的分析工具,这个在线的工具就派上用场了。

HeapHero :https://heaphero.io/index.jsp

猜你喜欢

转载自blog.csdn.net/qq_38420688/article/details/121888954
今日推荐