JAVA性能监控工具

JVM知识专栏JVM-火种,持续更新,喜欢请关注

系统性能监控

linux下的使用命令进行监控系统性能

pidstat

使用sudo apt-get install sysstat命令安装该工具(centos下使用 sudo yum install sysstat命令).pidstat可以监控到每个应用cpu使用率、io使用率、内存使用率。

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

想针对具体的一个应用排查它的性能情况,可以先使用ps -ef | grep java 找到对应应用的进程号
在这里插入图片描述

根据进程号查看进程cpu占用情况

pidstat -p 12694 -u 1 3 
// -p:指定进程号、12694:进程号、-u:统计cpu情况、1:没一秒统计一次、3:共统计3次,如果最后一个参数不写会一直统计,ctrl+C结束统计

JAVA性能监控工具_第1张图片
命令运行结果表示当前进程在三次统计中,cpu占有率分别是1%、0%、1%,平均cpu占有为0.67%,这三次输出时这个应用都是运行在系统的第三颗cpu上。

根据进程号查看进程对应线程cpu占用情况

pidstat -p 24886 -u 1 1 -t
// -t:查看线程情况

JAVA性能监控工具_第2张图片
假如有某个线程的cpu占用率特别高,我们就可以排查这个线程引起占用率高的原因。

根据进程号查看进程对应线程IO使用情况

pidstat -p 24886 -d 1 1 -t
//-d:查看io情况

JAVA性能监控工具_第3张图片
PID:进程id
kB_rd/s:每秒从磁盘读取的KB
kB_wr/s:每秒写入磁盘KB
kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
COMMAND:task的命令名

JDK自带工具的使用

jps

jps [options]  [hostid]

jps的使用格式为jps+参数,参数-q:只输出进程号,省略主类的名称、-v:输出虚拟机启动时的JVM参数。jps -v打印结果如下
JAVA性能监控工具_第4张图片
表明进程号为18723,应用类型为jar,JVM参数若干、gc收集地址/usr/solr-7.5.0/server/logs/solr_gc.log,端口号、应用位置等。tomcat使用未被显式指定的默认JVM参数时,输出信息不会包含JVM相关参数。

jinfo

jinfo [options]  pid

jinfo也可以打印虚拟机启动的参数详情,与jps不同的是它可以打印出未被显式指定的默认JVM参数

jinfo -flags 28459

在这里插入图片描述
指定了进程号为28456的JVM参数详情。

jinfo -flag MaxTenuringThreshold 2972

在这里插入图片描述
显示了新生代对象晋升到老年代对象的最大年龄。

jmap

jmap用于生成对存储快照,格式为:

jmap [option] vmid

生成Java应用程序的堆快照和对象的统计信息

jmap -histo 28459 > /mnt/TFS/abc.text

JAVA性能监控工具_第5张图片
命令表示打印进程号为28459的信息到 /mnt/TFS/abc.text文件。占用内存较多的[B、[C、[I分别表示[C : char[]、[I:int[]、[B:byte[] 。

jmap -dump:format=b,file=/mnt/TFS/heap.hprof 28459

在这里插入图片描述
Dump出的堆信息可以在MAT或者Visual VM工具进行分析。

jstack

jstack用于生成虚拟机当前时刻的线程快照(threaddump),可以用于定位线程出现的上时间卡顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待都是导致线程长时间停顿的常见原因。命令格式如下:

jstack [option] vmid

打印指定进程的线程信息到指定文件

jstack 28459 >>/mnt/TFS/bcd.text

打印出的结果是多个线程信息,取其中一个信息如下图,图中圈红的这个线程是dubbo服务的调度线程,当前状态是WAITING
JAVA性能监控工具_第6张图片

你可能感兴趣的:(JVM-火种)