JVM 问题排查-jvm命令

问题排查-jvm命令

常用命令

jps

jps # 显示进程的ID 和 类的名称
jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名 
jps –v # 输出jvm参数
jps –q # 显示java进程号
jps -m # main 方法
jps -l xxx.xxx.xx.xx # 远程查看 

在这里插入图片描述
jinfo

# 输出当前 jvm 进程的全部参数和系统属性
jinfo 2815

# 输出所有的参数
jinfo -flags 2815

# 查看指定的 jvm 参数的值
jinfo -flag PrintGC 2815

# 开启/关闭指定的JVM参数
jinfo -flag +PrintGC 2815

# 设置flag的参数
jinfo -flag name=value 2815

# 输出当前 jvm 进行的全部的系统属性
jinfo -sysprops 2815

实时查看和调整JVM配置参数:jinfo -flag name PID 查看某个java进程的name属性的值
在这里插入图片描述
在这里插入图片描述

jstat

查看类装载信息
jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次
在这里插入图片描述
查看垃圾收集信息
jstat -gc PID 1000 10
在这里插入图片描述
jstack

# 基本
jstack 2815

# java和native c/c++框架的所有栈信息
jstack -m 2815

# 额外的锁信息列表,查看是否死锁
jstack -l 2815
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent 的 ownable synchronizers列表.

-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息

-m 打印java和native c/c++框架的所有栈信息.

-h | -help 打印帮助信息

在这里插入图片描述

排查死锁案例
在这里插入图片描述
在这里插入图片描述

jstack找出占用cpu最高的线程堆栈信息

1、使用命令top -p 显示你的java进程的内存情况,pid是你的java进程号,比如19663

在这里插入图片描述

2、按H,获取每个线程的内存情况
在这里插入图片描述

3、找到内存和cpu占用最高的线程tid,比如19664
4、转为十六进制得到0x4cd0,此为线程id的十六进制表示
5、执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,
6、从堆栈中可以发现导致cpu飙高的调用方法,查看对应的堆栈信息找出可能存在问题的代码
在这里插入图片描述

jmap

# 查看堆的情况
jmap -heap 2815

# dump
jmap -dump:live,format=b,file=/tmp/heap2.bin 2815
jmap -dump:format=b,file=/tmp/heap3.bin 2815

# 查看堆的占用
jmap -histo 2815 | head -10

打印出堆内存相关信息
jmap -heap PID
在这里插入图片描述

dump出堆内存相关信息
jmap -dump:format=b,file=heap.hprof PID
在这里插入图片描述
一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

可以用jvisualvm命令工具导入该dump文件分析。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值