JDK虚拟机性能监控与故障处理工具

首先在云服务器上安装工具:
1、查看有哪些可以安装的工具
yum list --showduplicate | grep java-1.8 | grep devel
在这里插入图片描述
2、选择一个进行安装
yum install java-1.8.0-openjdk-devel.x86_64 -y
在这里插入图片描述
安装完成以后就可以使用了

一、命令行工具
1、jps (Jvm process status tool) :显示指定系统内所有的HotSpot虚拟机进程
命令格式:

jps [options][hostid]

例如:

jps -l

选项和作用:
-q: 只输出LVMID,省略主类名称
-m: 输出虚拟机进程启动时传递给主类main()函数的参数
-l: 输出主类全名,如果执行的时jar包,会输出jar路径
-v:输出虚拟机启动时JVM参数

2、jstat (Jvm static Monitoring Tool):用于收集HotSpot虚拟机各方面的运行数据
可以显示本地或者远程虚拟机中类装载、内存、垃圾收集、JIT编译等运行数据,是运行期定位虚拟机性能问题的首选工具
命令格式:

jstat [option vmid [interval[s|ms][count]]]

interval 和count代表查询间隔和次数
每250毫秒查询一次进程2764垃圾收集状况,查询20次:

jstat -gc 2764 250 20

选项和作用:
-class 类加载的信息
-gc 堆状况,GC时间等信息
-gcutil 关注于已使用空间比例
-gccause 与gcuti类试但是会输出上一次Gc的原因
-gcnew 监视新生代gc信息
-gcnewcapacity 与gcnew类试,关注使用到的最大最小空间
-gcold 监视老年代gc信息
-gcoldcapacity
-gcpermcapacity 输出永久代使用动的最大、最小空间
-compiler 输出jit编译器编译过的方法、耗时
-printcompilation 输出已经被JIt编译的方法

示例:

jstat -gcutil 2764

在这里插入图片描述
上面的参数什么意思:
S0C:年轻代中第一个survivor(幸存区)的容量 (kb)

S1C:年轻代中第二个survivor(幸存区)的容量 (kb)

S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (kb)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (kb)

EC:年轻代中Eden(伊甸园)的容量 (kb)

EU:年轻代中Eden(伊甸园)目前已使用空间 (kb)

OC:Old代的容量 (kb)

OU:Old代目前已使用空间 (kb)

PC:Perm(持久代)的容量 (kb)

PU:Perm(持久代)目前已使用空间 (kb)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

NGCMN:年轻代(young)中初始化(最小)的大小 (kb)

NGCMX:年轻代(young)的最大容量 (kb)

NGC:年轻代(young)中当前的容量 (kb)

OGCMN:old代中初始化(最小)的大小 (kb)

OGCMX:old代的最大容量 (kb)

OGC:old代当前新生成的容量 (kb)

PGCMN:perm代中初始化(最小)的大小 (kb)

PGCMX:perm代的最大容量 (kb)

PGC:perm代当前新生成的容量 (kb)

S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O:old代已使用的占当前容量百分比

P:perm代已使用的占当前容量百分比

S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (kb)

S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (kb)

ECMX:年轻代中Eden(伊甸园)的最大容量 (kb)

DSS:当前需要survivor(幸存区)的容量 (kb)(Eden区已满)

TT: 持有次数限制

MTT : 最大持有次数限制

3、jinfo(Configuration Info for Java):显示虚拟机配置信息

选项和作用
-v 查看虚拟机启动时指定的参数列表
-flag 查看未被显示指定的默认参数(java -XX:+PrintFlagsFinal 查看参数默认值也可以)
-syspropsn把虚拟机进程的System.getProperties()的内容打印出来
-flag [+/-] name或者 -flag name=value 修改一部分运行期可写的虚拟机参数值。
示例:
查询 CMSInitiatingOccupancyFraction参数值:

jinfo -flag CMSInitiatingOccupancyFraction 144

4、jmap(Memory Map for Java):生成虚拟机内存转存储快照(heapdump 文件)内存映射工具
还可以设置参数:
-XX:+HeapDumpPnOutOfMemoryError参数 可以让虚拟在发生OOM后生成dump文件
-XX:+HeadDumpOnCtrlBreak参数可使用Ctrl+Break键生成dump文件
或者Linux系统中通过Kill -3命令,也能拿到Dump文件

该工具还能查看finalize执行队列,java堆和永久代详细信息,垃圾收集器等
命令格式jmap [option] vmid
选项
生成heapdump文件
jmap -dump:live,format=b,file=dump.hprof 1155
在这里插入图片描述

jmap -finalizerinfo 1819
在这里插入图片描述
jmap -heap 1819。 堆配置和使用情况
在这里插入图片描述

5、jhat(Jvm heap dump browser):用于分析heapdump文件,它会建立一个http/html 服务。让用户可以在浏览器上查看分析结果

可以使用VisualVM,Eclipse Memory Analyzer、IBM HeapAnalyze等工具都可以用来替代jhat分析dump文件。

6、jstack(Stack track for java):显示虚拟机的线程快照(threaddump 或者javacore 文件)
堆栈跟踪工具
显示虚拟机每条线程的堆栈集合,生成堆栈快照的目的是未来定位线程长时间停顿的原因,能看见正在停顿的线程正在做什么,或者在等待什么资源。
命令格式:

jstack [option]vmid

选项和作用:

-F:当正常输出的请求不被响应时,强制输出线程堆栈
-l:除堆栈外,显示关于锁的附加信息。
-m:如果调用本地方法的话,可以显示C/C++的堆栈

另外Jdk 的Thread 提供getAllStackTraces方法可以获取虚拟机所有线程的堆栈跟踪信息。可以提供页面,实时查看

7、HSDIS:JIT生成代码发汇编
hotspot 虚拟机JIT编译代码反汇编插件。
它的作用是hotspot的-XX:+ PrintAssemby指令调用它来把动态生成的本地代码还原成为汇编代码输出,并且能生成有意义的注释。主要目的是为力分析程序的执行问题(虚拟机怎么做的,性能如何)

插件使用命令:
debug 和fastDebug版本的Hotspot,可以通-XX
:+printAssemby指令使用插件
Product版本的Hostspot还需要:输入
-XX:+UnlockDiagnosticVmOption参数

二、可视化工具
1、JConsole java监视与管理控制台

内存页:相当于可视化的jstat命令
线程页:相当于可视化的jstack

2、VisualVM 多合一故障处理工具
是目前jdk发布的功能最强大的监视和故障处理程序
除了能监视、故障处理还提供优秀的性能分析,并且不需要被监视的程序基于特殊Agent运行,因此它堆应用程序的世纪性能影响很小,可以直接在生产环境中使用。

功能:
1、类似jps,jinfo、jstat、jstack,jmap、jhat
2、方法级性能分析已经方法的调用和运行时间
3、离线快照
4、加入其他插件功能

有非常强的向下兼容能力
插件安装:下载*.nbm包后,点击工具-》插件-》已下载,选择包路径安装

查看堆栈可以使用的命令

1、用命令top查看java进程的内存和cpu占用情况。

2、jmap -histo  pid查询指定java进程的所有对象使用内存情况。

3、ps -mp pid -o THREAD,tid,time  查询所有线程列表

4、将需要的线程ID转换为16进制格式:printf "%x\n" tid

5、jstack pid |grep tid -A 30    查看该线程堆栈信息   

ps:    pid  是进程ID      tid    是线程ID     -A 30  表示显示最后30

一次完整的查看堆栈的过程

1、在这里插入图片描述
2、
在这里插入图片描述

3、jstack 19241 |grep 4c57 -A 30
在这里插入图片描述

文章内容来源于《深入理解JAVA虚拟机》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值