(一)JAVA CPU占用过高问题排查(linux)
JAVA CPU占用过高问题排查(linux)
首先当然要看下具体是java中哪个线程一直在占用cpu时间哈(说明下,我的java进程号是 26178) 1.根据java进程ID进行CPU占用排查 ps -mp 26178 -o THREAD,tid,time | sort -rn | more (sort -rn 以数值的方式进行逆序排列)
3.再使用jstack命名查询是哪个线程 TID十进制-》十六进制 26217 -》 6669 26182 -》 6646 26183 -》 6647 拿到线程ID的16进制之后,就可以从jstack中查找具体是对应的线程 jstack 26178 |grep 6669 -A 30
5.jmap -histo:live 26178 | more 简单查看对象的大小数目
6.dump内存,使用工具分析内存镜像,jmap -dump:live,format=b,file=problem.bin 26178
7.使用MAT(Memory Analyzer tool)进行数据分析,注意,如果步骤6中dump出来文件过大,需要设置MAT配置文件(MemoryAnalyzer.ini)的xmx参数的大小。
最近发现有一个服务在服务器上无响应,到服务器上一看,好家伙,java进程CPU一直100%以上
首先当然要看下具体是java中哪个线程一直在占用cpu时间哈(说明下,我的java进程号是 26178) 1.根据java进程ID进行CPU占用排查 ps -mp 26178 -o THREAD,tid,time | sort -rn | more (sort -rn 以数值的方式进行逆序排列)
3.再使用jstack命名查询是哪个线程 TID十进制-》十六进制 26217 -》 6669 26182 -》 6646 26183 -》 6647 拿到线程ID的16进制之后,就可以从jstack中查找具体是对应的线程 jstack 26178 |grep 6669 -A 30
可以发现,几个占用大量cpu时间的线程都是GC相关。
4.再次确认gc信息,查看gc time等信息,jstat -gcutil 26178 1000 100
5.jmap -histo:live 26178 | more 简单查看对象的大小数目
6.dump内存,使用工具分析内存镜像,jmap -dump:live,format=b,file=problem.bin 26178
7.使用MAT(Memory Analyzer tool)进行数据分析,注意,如果步骤6中dump出来文件过大,需要设置MAT配置文件(MemoryAnalyzer.ini)的xmx参数的大小。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 线上服务CPU100%问题快速定位实战
- 下一篇: 分析JAVA应用CPU占用过高的问题