分享

JVM性能监控与如何解决故障

 Bladexu的文库 2017-09-12

名称主要作用
jpsJVM Process Status Tool,显示指定系统内的所有HotSpot虚拟机进程。(相当于linux的ps查看进程)
jstatJVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方便的运行数据。(比如查看GC,查看堆内存空间以及类装载卸载数目等)
jinfoConfiguration Info for Java,显示虚拟机配置信息。(可以查看当前虚拟机的运行参数以及可以动态修改JVM运行参数,比如打开GC打印等)
jmapMemory Map for Java,生成虚拟机的内存转储快照(heapdump文件,很实用,我们可以利用jmap生成dump,助于我们分析)
jhatJVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果。(此处不讲解这个命令,因为他有很多可替代的产品,比如VisualVM可视化工具等)
jstackStack Trace for java,显示虚拟机的线程快照。(助于我们分析,可以分析出哪里死循环,哪里线程死锁了等)

一、jps:虚拟机进程状况工具

1、格式

jps [参数] [hostid]

2、参数列表

JVM性能监控与如何解决故障

3、实战

jps

JVM性能监控与如何解决故障

只显示了唯一ID(理解成进程号)和jar这个简略的名称。

jps -q

JVM性能监控与如何解决故障

更过分了,只显示了进程号。毫无意义。

jps -l

JVM性能监控与如何解决故障

显示了jar的全名称,我是脚本启动的jar,所以只显示了名称,若非脚本启动,则会显示jar的全路径。

jps -m

JVM性能监控与如何解决故障

显示了我给main方法传递的参数,这里传了端口号(--server.port)

jps -v

JVM性能监控与如何解决故障

可以看出我们这个jar包设置了最大最小内存为128m。

还可以组合用

jps -l -v

JVM性能监控与如何解决故障

这样我们既查看了jar的全路径又查看了他的JVM运行参数。

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

1、格式

jstat [参数] [vmid] [interval(s|ms)] [count]

说明下:VMID与LVMID区别:若是本地JVM进程,则一样,若是远程的JVM,则VMID格式应该是如下:

[protocol:][//]lvmid[@hostname[:port]/servername]

2、参数列表

主要分为3类(类装载、垃圾收集、运行期编译状况)。

JVM性能监控与如何解决故障

3、实战

参数太多了,这里只演示其中几个。

首先通过

jps -l

查出我们的进程号

JVM性能监控与如何解决故障

jstat -class 22167 1000 3

每隔一秒钟输出进程号是22167的class装载卸载等信息,输出3次。

JVM性能监控与如何解决故障

jstat -gcutil 22167

省略最后两个参数代表只输出一次结果。

JVM性能监控与如何解决故障

三、jinfo:Java配置信息工具

1、格式

jinfo [option] pid

2、参数列表

JVM性能监控与如何解决故障

3、实战

jinfo -flag MaxTenuringThreshold 22167

显示新生代对象晋升到老年代对象的最大年龄

JVM性能监控与如何解决故障

jinfo -flag PrintGCDetails 22167

显示是否打印GC详细信息

JVM性能监控与如何解决故障

不打印,因为是-PrintGCDetails

那就给他改成打印(注意,我们程序在运行中,我们要在运行的环境中修改运行时JVM参数)

jinfo -flag +PrintGCDetails 22167

jinfo -flag PrintGCDetails 22167

JVM性能监控与如何解决故障

四、jmap:Java内存映像工具

1、格式

jmap [option] vmid

2、参数列表

JVM性能监控与如何解决故障

3、实战

jmap -histo 30773 >/tmp/test.txt

生成Java应用程序的堆快照和对象的统计信息(生成到/tmp下的test.txt),如下是test.txt的部分截图

JVM性能监控与如何解决故障

jmap -dump:format=b,file=/tmp/heap.hprof 30773

打出dump堆,利于分析。

JVM性能监控与如何解决故障

这时候就可以借助分析dump工具进行分析了。

五、jstack:Java堆栈跟踪工具

1、格式

jstack [option] vmid

2、参数列表

JVM性能监控与如何解决故障

3、实战

jstack 30773 >>/tmp/jstack.txt

打印进程号是30773的信息到jstack.txt文件

JVM性能监控与如何解决故障

六、如何解决故障

JDK自己提供了的性能监控可视化工具。

1、JConsole

2、VisualVM

这两个是可视化工具的使用,上网搜搜资料就会了。此处不讲解。

通过VisualVM可以让开发者发现各种异常情况,比如死锁,堆溢出等等。

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!

欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货(纯干货的东西,并非Java基础语法这些。)

JVM性能监控与如何解决故障

Java码农社区

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多