JVM-监控命令(5)

本文介绍了JDK内置的多种工具,包括jps、jstat、jinfo、jmap、jhat、jstack、hsdis、jconsole和VisualVM。这些工具可用于监控、调试和分析Java虚拟机的状态,帮助开发者诊断和解决性能问题。

工具是知识技能的一层包装。在jdk的bin中,除了java.exe,javac.exe,还有很多用于监视和处理的工具,而且这些工具都是基于jdk/lib/tools.jar来实现的。 “采用Java代码来实现这些监控工具是有特别用意的:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能

一、jps 查看虚拟机的进程状况

jps(JVM process status) 作用单一,“列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID”

 jps[options][hostid] 命令格式
 jps -l 输出主类的全名
 jps -v 查看jvm的所有的参数

二、 jstat 虚拟机统计信息监视工具

jstat(jvm statistics monitoring tool)虚拟机统计信息监控的工具,“它可以显示本地或者远程[1]虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具”.

“使用jstat工具在纯文本状态下监视虚拟机状态的变化”

“jstat[option vmid[interval[s|ms][count]]]”  option,vmID,interval 查询的间隔,count 查询的次数

“假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是: jstat-gc 2764 250 20”

-gc 监视jvm中堆的情况 -gcutil 更多的关注的是占内存的百分比 -gcold 关注老年代的gc情况 -compile jit编译过的方法

“D:\Develop\Java\jdk1.6.0_21\bin>jstat-gcutil 2764
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 6.20 41.42 47.20 16 0.105 3 0.472 0.577
查询结果表明:这台服务器的新生代Eden区(E,表示Eden)使用了6.2%的空间,两个Survivor区(S0、S1,表示Survivor0、Survivor1)里面都是空的,老年代(O,表示Old)和永久代(P,表示Permanent)则分别使用了41.42%和47.20%的空间。程序运行以来共发生Minor GC(YGC,表示Young GC)16次,总耗时0.105秒,发生Full GC(FGC,表示Full GC)3次,Full GC总耗时(FGCT,表示Full GC Time)为0.472秒,所有GC总耗时(GCT,表示GC Time)为0.577秒

三、jinfo 查看虚拟机各项参数

jinfo(configuration info for java)作用是实时地查看和调整虚拟机各项参数” “jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了”

jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来”

命令格式:jinfo[option]pid

“查询CMSInitiatingOccupancyFraction参数值。
C:\>jinfo-flag CMSInitiatingOccupancyFraction 1444
-XX:CMSInitiatingOccupancyFraction=85”

四、jmap 内存映像工具

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件) “map的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息”

“3500是通过jps命令查询到的LVMID。”
“jmap-dump:format=b,file=eclipse.bin 3500
Dumping heap to C:\Users\IcyFenix\eclipse.bin……
Heap dump file created”

五、jhat 堆转储分析工具

jhat(JVM heap analysis tool),与jmap来一起进行使用,用来分析用jmap来生成的堆转储快照。

jhat中自带一个小型的http/html的服务器,那么在生成了dump文件的分析结构以后,可以去浏览器中去看

但是jhat一般不用,一方面是因为命令行 ,另一方面是因为分析是一个麻烦的事情,消耗大量的硬件资源

六、 jstack 堆栈跟踪工具

jstack(stack trace for java)“用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件) “线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。”

七、“HSDIS:JIT生成代码反汇编”

“在Java虚拟机规范中,详细描述了虚拟机指令集中每条指令的执行过程、执行前后对操作数栈、局部变量表的影响等细节”

八、jconsole

jconsole(java Monitoring and Management console)基于JMX的可视化和管理的工具 “概述”、“内存”、“线程”、“类”、“VM摘要”、“MBean”,“概述”页签显示的是整个虚拟机主要运行数据的概览,其中包括“堆内存使用情况”、“线程”、“类”、“CPU使用情况”4种信息的曲线图,这些曲线图是后面“内存”、“线程”、“类”页签的信息汇总”

“如果上面的“内存”页签相当于可视化的jstat命令的话,“线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析”

其中“jstack命令的时候提到过线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁”

九、 visualVM 多合一故障处理工具

“VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序”

转载于:https://my.oschina.net/u/2984281/blog/793002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值