JDK工具-命令

本文介绍了JVM性能监控的一系列工具,包括jstat用于GC统计,jmap用于内存映像和堆分析,jstack用于堆栈跟踪,jinfo获取配置信息,jps查看进程状态,jcmd进行内存管理和诊断,以及jhat(已废弃)的堆分析。这些工具帮助开发者定位和解决JVM相关的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文仅列举常用的jvm性能监控和故障处理工具,由本人经验由使用频率从高到底介绍


所有举例命令中涉及到的jvm进程id为:9527


一、虚拟机统计信息监视工具-jstat(JVM Statistic Monitoring Tool)

	# -h5表示每5行输出一次头信息,9527为进程号,1000为每秒输出一次
	# 主要关注已使用空间占此空间的百分比
	jstat -gcutil -h5 9527 1000

jstat -gcutil监控结果截图:
在这里插入图片描述
其中表头含义依次为:
S0:survivor0使用比例
S1:survivor1使用比例
E :Eden区使用比例
O :老年代使用比例
M :元空间使用比例(P:permanent永久代使用百分比)
CCS:压缩使用比例(Compressed class space)
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回的总时间
FGC:对堆内存整体包含(新生代,老年代,永久代)垃圾回收次数
FGCT:对堆内存整体包含(新生代,老年代,永久代)垃圾回收消耗时间
GCT:垃圾回收消耗总时间 所有耗时统计的默认单位为秒

二、java内存映像工具-jmap(Memory Map for java)

jmap不仅可以获取堆转储快照,还可以查询finalize执行队列、java堆和方法区的相信信息,如空间使用率、当前用的是哪种收集器等。

	# 查看jvm堆占用情况
	jmap -heap 9527
	# 根据对象的占用大小排序,输出前n行
	jmap -histo 9527 | awk 'NR<100'
	jmap -histo 9527 | head -n 100
	# dump堆文件,加live参数会触发一次fullgc,只dump可达对象
	jmap -dump:live,format=b,file=/home/heap_xxx.bin 9527

在生产环境中,一般会增加jvm配置,当发生内存溢出时候自动转储快照文件,以供事后分析:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap_xxx.bin

三、java堆栈跟踪工具-jstatck(Stack Trace for Java)

	jstack [option] vmid
	-F 强制输出线程堆栈
	-l 除堆栈外,显示关于锁的附加信息
	-m 如果涉及本地方法,显示C/C++的堆栈

常用的方式是,查询最消耗CPU的线程

	# 1.查询需要分析的jvm进程的vmid
	top/ps -ef | grep xx
	# 2.找出jvm进程中占用cpu最高的线程号
	top -Hp 9527
	# 3.将线程号转为十六进制
	printf "%x" nid
	# 4.通过jstatck工具查看该线程状态和堆栈(-A为匹配nid后的30行)
	jstack 9527 | grep 16进制nid  -A 30

四、java配置信息工具-jinfo(Configuation Info for Java)

实时查看和调整虚拟机各项参数:

	# 打印jvm配置
	jinfo 9527
	# 输出System.getProperties()的内容
	jinfo -sysprops 9527
	# 输出某个具体的jvm配置(此处为最大堆内存)
	jinfo -flag MaxHeapSize 9527
	
	# 查看该jvm每个线程内存分配
	jinfo -flag ThreadStackSize 9527

五、虚拟机进程状况工具-jps(JVM Process Status Tool)

这个工具虽然常用但是简单,所以列在靠后

	jps
	# 输出虚拟机启动时的JVM参数
	jps -v | grep xxx
	ps -ef | grep xxx

六、jcmd

	# 增加参数(无法实时修改,需要增加jvm配置重启生效)
	-XX:NativeMemoryTracking=detail
	# 用jinfo查看当前jvm配置是否生效
	jinfo -flag NativeMemoryTracking 9527 
	jcmd 9527 VM.native_memory summary  scale=MB
	
	# 设置基线
	jcmd 9527 VM.native_memory baseline
	# 经过一段时间再观察内存变化
	jcmd 9527 VM.native_memory summary.diff scale=MB
	
	# 结合内存分配详情
	pmap -x 19  | sort -n -k3 
   
    # 注意以下命令无法直接修改NMT配置,可以通过下面的版本命令查询结果为manageable可以实时修改,比如GC打印相关的配置
    jinfo -flag NativeMemoryTracking=detail 9527
    java -XX:+PrintFlagsFinal -version | grep manageable

在这里插入图片描述

七、堆栈转储快照分析工具-jhat (JVM Heap Analysis Tool)

	# 通过暴漏的端口用浏览器查看分析结果,不推荐使用,生产环境禁止使用,使用eclipse的MAT分析
	jhap dump_xxx.bin

总结

jdk原生工具中最常用的就是jstat和jmap以及jstack命令,需要熟练掌握其基础使用方法遇到jvm方面问题可以快速定位问题,其他工具了解即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值