名称 | 主要作用 |
---|---|
jps | JVM Process Status Tool,显示指定系统内的所有HotSpot虚拟机进程。(相当于linux的ps查看进程) |
jstat | JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方便的运行数据。(比如查看GC,查看堆内存空间以及类装载卸载数目等) |
jinfo | Configuration Info for Java,显示虚拟机配置信息。(可以查看当前虚拟机的运行参数以及可以动态修改JVM运行参数,比如打开GC打印等) |
jmap | Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件,很实用,我们可以利用jmap生成dump,助于我们分析) |
jhat | JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果。(此处不讲解这个命令,因为他有很多可替代的产品,比如VisualVM可视化工具等) |
jstack | Stack Trace for java,显示虚拟机的线程快照。(助于我们分析,可以分析出哪里死循环,哪里线程死锁了等) |
一、jps:虚拟机进程状况工具
1、格式
jps [参数] [hostid]
2、参数列表
3、实战
jps
只显示了唯一ID(理解成进程号)和jar这个简略的名称。
jps -q
更过分了,只显示了进程号。毫无意义。
jps -l
显示了jar的全名称,我是脚本启动的jar,所以只显示了名称,若非脚本启动,则会显示jar的全路径。
jps -m
显示了我给main方法传递的参数,这里传了端口号(--server.port)
jps -v
可以看出我们这个jar包设置了最大最小内存为128m。
还可以组合用
jps -l -v
这样我们既查看了jar的全路径又查看了他的JVM运行参数。
二、jstat:虚拟机统计信息监视工具
1、格式
jstat [参数] [vmid] [interval(s|ms)] [count]
说明下:VMID与LVMID区别:若是本地JVM进程,则一样,若是远程的JVM,则VMID格式应该是如下:
[protocol:][//]lvmid[@hostname[:port]/servername]
2、参数列表
主要分为3类(类装载、垃圾收集、运行期编译状况)。
3、实战
参数太多了,这里只演示其中几个。
首先通过
jps -l
查出我们的进程号
jstat -class 22167 1000 3
每隔一秒钟输出进程号是22167的class装载卸载等信息,输出3次。
jstat -gcutil 22167
省略最后两个参数代表只输出一次结果。
三、jinfo:Java配置信息工具
1、格式
jinfo [option] pid
2、参数列表
3、实战
jinfo -flag MaxTenuringThreshold 22167
显示新生代对象晋升到老年代对象的最大年龄
jinfo -flag PrintGCDetails 22167
显示是否打印GC详细信息
不打印,因为是-PrintGCDetails
那就给他改成打印(注意,我们程序在运行中,我们要在运行的环境中修改运行时JVM参数)
jinfo -flag +PrintGCDetails 22167
jinfo -flag PrintGCDetails 22167
四、jmap:Java内存映像工具
1、格式
jmap [option] vmid
2、参数列表
3、实战
jmap -histo 30773 >/tmp/test.txt
生成Java应用程序的堆快照和对象的统计信息(生成到/tmp下的test.txt),如下是test.txt的部分截图
jmap -dump:format=b,file=/tmp/heap.hprof 30773
打出dump堆,利于分析。
这时候就可以借助分析dump工具进行分析了。
五、jstack:Java堆栈跟踪工具
1、格式
jstack [option] vmid
2、参数列表
3、实战
jstack 30773 >>/tmp/jstack.txt
打印进程号是30773的信息到jstack.txt文件
六、如何解决故障
JDK自己提供了的性能监控可视化工具。
1、JConsole
2、VisualVM
这两个是可视化工具的使用,上网搜搜资料就会了。此处不讲解。
通过VisualVM可以让开发者发现各种异常情况,比如死锁,堆溢出等等。
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货(纯干货的东西,并非Java基础语法这些。)
Java码农社区
联系客服