java jamp cmd,Java命令行监控工具jmap,jstack...

原标题:Java命令行监控工具jmap,jstack...

Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大。因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查。监控的工具有很多种, 但是java自带的命令行监控工具,是必须要掌握的。

查看系统中jvm进程,其它的命令通常先使用jps查看进程号,然后在根据线程号获取jvm进程信息

134257700b961b39feb594b2791f1375.png

jps -m查看jvm进程并且带有参数查看jps -v查看传递到jvm的参数

官方jps解释:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jps.html

显示JVM的性能统计信息,常见用法:jstat -option [-t] [-hlines] vmid [interval [count]]例如:查看JIT编译信息,GC信息和JVM中的class信息。

7397e09ce4a8dc901ec5004914876efb.png

解释下-gc选项中列的含义:-gc查看垃圾收集器中的信息, 主要包含jvm的运行时数据区统计。后缀为C的代表当前区的容量,后缀为U的代表已经使用了多少容量,后缀为T的代表耗时

S0C存活区0的容量(KB)S1C存活区1的容量(KB)S0U存活区0使用的空间(KB).S1U存活区1的利用空间(KB).EC Eden区的容量(KB).EU Eden区利用的容量(KB).OC老年代容量(KB).OU老年代使用容量(KB).PC当前永久带的容量(KB).PU永久带使用容量(KB).YGC发生了多少次Young GCYGCT Young GC的时间FGC Full GC的次数FGCT Full GC的收集时间GCT总共的GC时间.

官方jstat解释:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

查看线程堆栈信息,在发生死锁的时候可以利用这个命令查找死锁或者在发生死循环的时候利用此命令排查。

jstack vmpid会打印线程的堆栈信息。通过堆栈可以查看具体线程正在执行那些代码,厦门演示两个使用jstack排查死锁与死循环的命令。

死锁代码:

死锁之后:可以看到jstack已经帮我们找到了死锁。

162690af7f9abba649a9fd316ce67c98.png

25eb42e9dfdaeff9a8f8cf572f0fd687.png

死循环需要配合Top命令一起使用,死循环会导致CPU不断的飙升,这时候使用top命令,查看cpu占用率较高的命令:

a55c02ae1e623216a2bdef2f7ab81462.png

使用top -H -p 24278查看进程中具体是那一条线程的CPU利用率高

ad6ec934219abe2ba7080be57c4462e1.png

可以看到是24279的线程,在top中使用的是10进制,在jstack中打印的线程是16进制,因此做一次转换。24279 = 5ed7然后查看线程:

4b2880b785e10a9c8429ab631a957c42.png

然后我们可以知道具体那一行的指令在一直运行。

jstack官方文档解释

jinfo可以查看当前JVM线程配置的系统属性,以及运行时设置的参数值。

直接使用jinfo

1.前半段是系统的属性

0e59fe2685e17518aec451fb16246142.png

2.后半段是jvm的参数

0502fc8d1b532cd0f7543b20ea8c430b.png

我们也可以直接使用jinfo查看具体的某个参数值:

1f0e8d18128bbe33f9a66b276c3c28af.png

jinfo官方解释

在发生OME的时候,会用jmap分析堆中具体是什么问题,才能更好的解决问题。jmap一般和mat配合使用。

一般在java开发的项目启动时候,最好加上下面命令,在内存溢出的时候可以通过日志查看信息。-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/java/dump

当然在项目运行的时候也可以使用jmap -heap jvmpid查看对象内存的映射。

堆内存溢出代码

运行:

3a60df1762d7d5865ff2f664f9cb0c62.png

大家可以去网站上下载java mat的二进制压缩包,学习一下

在线分析hprof文件:http://heaphero.io/

3e0d9713e955941ec530041520acaff2.png

570d668e0e8c0199116c72688005d409.png

如果每次都等到内存溢出才导出文件时间就有些晚了,可以使用jmap直接导出

jmap官方解释

这篇文章主要介绍了java自带的命令行工具,通过这些命令行工具,我们可以很好的得知当前jvm的运行状态。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值