jvm监控及诊断工具

1概述:可能造成java应用程序出现性能问题的原因有很多,例如,线程控制,磁盘读写,数据库访问,网络I/O,垃圾收集等。

立足点:使用数据说明问题,使用知识分析问题,使用该工具处理问题。

2.jps查看正在运行的进程

jps(Java Process Status)

package com.qf58.exec.ratelimiter;

import java.util.Scanner;

/**
 * @version 1.0
 * @author刘源源
 * @date2021-02-21 09:43
 */

public class JpsTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String info = scanner.next();
    }

}

 

运行前,cmd 输入jps 

运行后:cmd 输入jps

这个13272就是cpu分配的启动进程

 

3.jstat :查看jvm统计信息

jstat(JVM Statistics Monitoring Tool)用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

linux上常用于检测垃圾回收问题和内存泄露问题。

参数选项option可以由以下值构成。
类装载相关的:
-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等
 
垃圾回收相关的:
-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。
-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。
-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。
-gcnew:显示新生代GC状况
-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-geold:显示老年代GC状况
-gcoldcapacity:显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity:显示永久代使用到的最大、最小空间。
 
JIT相关的:
-compiler:显示JIT编译器编译过的方法、耗时等信息
-printcompilation:输出已经被JIT编译的方法 

1>类加载统计

jstat -class 13272

Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:加载时间

如上的unloaded为0 说明都加载完成了

2>编译统计

jstat -compiler 13272

Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法

如上编译了97个字节,失败为0 花费时间为0.03秒

3>垃圾回收统计

jstat -gc 13272

S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

 

jstat还可以用来判断是否出现内存泄漏。
 
第1步:
在长时间运行的 Java 程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中 OU 列(即已占用的老年代内存)的最小值。
第2步:
然后,我们每隔一段较长的时间重复一次上述操作,来获得多组 OU 最小值。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。

4>jinfo:实时查看和修改JVM配置参数

jinfo(Configuration Info for Java)
查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数。

官方帮助文档:
https://docs.oracle.com/en/java/javase/11/tools/jinfo.html

jinfo -flags 13272      查看曾经赋过值的一些参数

扩展:java -XX:+PrintFlagsInitial     查看所有JVM参数启动的初始值

          java -XX:+PrintFlagsFinal   查看所有JVM参数的最终值

         java -XX:+PrintCommandLineFlags    查看那些已经被用户或者JVM设置过的详细的XX参数的名称和值

5> jmap:导出内存映像文件&内存使用情况

jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章