JVM(7):虚拟机性能分析和故障解决工具之jstat工具

news2025/1/17 21:31:35

1 jstat(JVM Statistics Monitoring Tool)作用

监视虚拟机各种运行状态信息,可以显示本地或者是远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据

2 命令格式

jstat [options vmid [interval[count]]]

参数解释

第一个参数:options

代表用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如下:

  • -class:显示有关类加载器行为的统计信息
  • -compiler:显示有关Java HotSpot VM即时编译器行为的统计信息
  • -gc:显示有关垃圾收集堆行为的统计信息
  • -gccapacity:显示有关各个垃圾回收代容量及其相应空间的统计信息
  • -gccause:显示有关垃圾收集统计信息(同-gcutil),以及上一次和当前(如果适用)垃圾收集事件的原因
  • -gcnew:显示新生代行为的统计信息
  • -gcnewcapacity:显示有关新生代大小及其相应空间的统计信息
  • -gcold:显示有关老年代行为的统计信息和元空间统计信息
  • -gcoldcapacity:显示有关老年代大小的统计信息
  • -gcmetacapacity:显示有关元空间大小的统计信息
  • -gcutil:显示有关垃圾收集统计信息
  • -printcompilation:显示Java HotSpot VM编译方法统计信息

第二个参数:vmid

如果是本地虚拟机进程,vmid和本地虚拟机唯一ID是一致的

如果是远程虚拟机进程,那vmid的格式应当是:

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

第三个参数:interval

采样间隔,单位为秒(s)或毫秒(ms)

默认单位是毫秒。必须为正整数。

指定后,该jstat命令将在每个间隔产生其输出

第四个参数:count

要显示的样本数

3 案例

package com.example.demo;

import java.io.IOException;


/*
    -class选项:类加载器统计信息
        Loaded:已加载的类数
        Bytes:加载的kB数
        Unloaded:卸载的类数
        Bytes:卸载的KB数

        Time:执行类加载和卸载操作所花费的时间

    -compiler选项:Java HotSpot VM即时编译器统计信息
        Compiled:执行的编译任务数
        Failed:编译任务数失败
        Invalid:无效的编译任务数
        Time:执行编译任务所花费的时间
        FailedType:上次失败的编译的编译类型
        FailedMethod:上次失败的编译的类名和方法


 */
public class jstatdemo {
    public static void main(String[] args) throws IOException {
        System.out.println("jstat");
        System.in.read();
    }
}

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次:

查询一次进程14148垃圾收集情况:

jstat –gc 14148

假设需要每250毫秒查询一次进程8888垃圾收集情况,一共查询10次,那命令应当是:

jstat –gc 8888 250 10

常见统计选项演示:

-class选项:

类加载器统计信息:

  • Loaded:已加载的类数
  • Bytes:加载的kB数
  • Unloaded:卸载的类数
  • Bytes:卸载的KB数
  • Time:执行类加载和卸载操作所花费的时间

代码如下:

package com.example.demo;

import java.io.IOException;


/*
    -class选项:类加载器统计信息
        Loaded:已加载的类数
        Bytes:加载的kB数
        Unloaded:卸载的类数
        Bytes:卸载的KB数

        Time:执行类加载和卸载操作所花费的时间

    -compiler选项:Java HotSpot VM即时编译器统计信息
        Compiled:执行的编译任务数
        Failed:编译任务数失败
        Invalid:无效的编译任务数
        Time:执行编译任务所花费的时间
        FailedType:上次失败的编译的编译类型
        FailedMethod:上次失败的编译的类名和方法


 */
public class jstatdemo {
    public static void main(String[] args) throws IOException {
        System.out.println("jstat");
        System.in.read();
    }
}

启动后,使用命令查看

jstat -class 14148

-compiler选项:

Java HotSpot VM即时编译器统计信息:

  • Compiled:执行的编译任务数
  • Failed:编译任务数失败
  • Invalid:无效的编译任务数
  • Time:执行编译任务所花费的时间
  • FailedType:上次失败的编译的编译类型
  • FailedMethod:上次失败的编译的类名和方法

代码如下:

package com.example.demo;

import java.io.IOException;


/*
    -class选项:类加载器统计信息
        Loaded:已加载的类数
        Bytes:加载的kB数
        Unloaded:卸载的类数
        Bytes:卸载的KB数

        Time:执行类加载和卸载操作所花费的时间

    -compiler选项:Java HotSpot VM即时编译器统计信息
        Compiled:执行的编译任务数
        Failed:编译任务数失败
        Invalid:无效的编译任务数
        Time:执行编译任务所花费的时间
        FailedType:上次失败的编译的编译类型
        FailedMethod:上次失败的编译的类名和方法


 */
public class jstatdemo {
    public static void main(String[] args) throws IOException {
        System.out.println("jstat");
        System.in.read();
    }
}

启动后,使用命令查看

jstat -compiler 14148

-gc 选项:

垃圾收集的堆统计信息

  • S0C:当前幸存者空间0容量(kB)
  • S1C:当前生存空间1的容量(kB)
  • S0U:幸存者空间0使用大小(kB)
  • S1U:幸存者空间1使用大小(kB)
  • EC:当前伊甸园空间容量(kB)
  • EU:伊甸园空间使用大小(kB)
  • OC:当前的老年代容量(kB)
  • OU:老年代使用大小(kB)
  • MC:元空间容量(kB)
  • MU:元空间使用大小(kB)
  • CCSC:压缩的类空间容量(kB)
  • CCSU:使用的压缩类空间(kB)
  • YGC:新生代垃圾收集事件的数量
  • YGCT:新生代垃圾回收时间
  • FGC:完整GC事件的数量
  • FGCT:完整的垃圾收集时间
  • GCT:总垃圾收集时间

代码如下:

package com.example.demo;

import java.io.IOException;

/*
    -gc 选项:垃圾收集的堆统计信息
        S0C:当前幸存者空间0容量(kB)
        S1C:当前生存空间1的容量(kB)
        S0U:幸存者空间0使用大小(kB)
        S1U:幸存者空间1使用大小(kB)
        EC:当前伊甸园空间容量(kB)
        EU:伊甸园空间使用大小(kB)
        OC:当前的老年代容量(kB)
        OU:老年代使用大小(kB)
        MC:元空间容量(kB)
        MU:元空间使用大小(kB)
        CCSC:压缩的类空间容量(kB)
        CCSU:使用的压缩类空间(kB)
        YGC:新生代垃圾收集事件的数量
        YGCT:新生代垃圾回收时间
        FGC:完整GC事件的数量
        FGCT:完整的垃圾收集时间
        GCT:总垃圾收集时间
 */
public class jstatdemo01 {
    //-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc
    public static void main(String[] args) throws InterruptedException, IOException {
        final int _1MB = 1024 * 1024;
        byte[] b1 = new byte[2 * _1MB];
        System.out.println("1...");
        System.in.read();

        byte[] b2 = new byte[2 * _1MB];
        System.out.println("2...");
        System.in.read();

        byte[] b3 = new byte[2 * _1MB];
        System.out.println("3...");
        System.in.read();
    }
}

设置JVM参数

-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc

运行结果如下:

代码中有System.in.read();需要点击回车键才能向下运行。

运行第一段时,结果如下:

        byte[] b1 = new byte[2 * _1MB];
        System.out.println("1...");
        System.in.read();

查看GC如下

点击回车,运行第二段代码:

        byte[] b2 = new byte[2 * _1MB];
        System.out.println("2...");
        System.in.read();

结果如下:

点击回车,运行第三段代码:

        byte[] b3 = new byte[2 * _1MB];
        System.out.println("3...");
        System.in.read();

查看GC,如下:

综合3次的GC来看,会发现。

第二次只增加的伊甸园区EU的数量,其他的没有变化。

第三次结果会发现幸存区、伊甸园区、新生代垃圾收集事件的数量、新生代垃圾回收时间、总垃圾收集时间被使用。

-gcutil 选项:

垃圾收集统计信息

  • S0:幸存者空间0利用率占该空间当前容量的百分比
  • S1:幸存者空间1利用率占空间当前容量的百分比
  • E:Eden空间利用率占空间当前容量的百分比
  • O:老年代利用率占空间当前容量的百分比
  • M:元空间利用率占空间当前容量的百分比
  • CCS:压缩的类空间利用率,以百分比表示
  • YGC:新生代GC事件的数量
  • YGCT:新生代垃圾回收时间
  • FGC:完整GC事件的数量
  • FGCT:完整的垃圾收集时间
  • GCT:总垃圾收集时间

代码如下:

package cn.itcast;

import java.io.IOException;

/*
    gcutil 选项:垃圾收集统计信息
        S0:幸存者空间0利用率占该空间当前容量的百分比
        S1:幸存者空间1利用率占空间当前容量的百分比
        E:Eden空间利用率占空间当前容量的百分比
        O:老年代利用率占空间当前容量的百分比
        M:元空间利用率占空间当前容量的百分比
        CCS:压缩的类空间利用率,以百分比表示
        YGC:新生代GC事件的数量
        YGCT:新生代垃圾回收时间
        FGC:完整GC事件的数量
        FGCT:完整的垃圾收集时间
        GCT:总垃圾收集时间
*/
public class Demo03 {
    //-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc
    public static void main(String[] args) throws InterruptedException, IOException {
        final int _1MB = 1024 * 1024;
        byte[] b1 = new byte[2 * _1MB];
        System.out.println("1...");
        System.in.read();

        byte[] b2 = new byte[2 * _1MB];
        System.out.println("2...");
        System.in.read();

        byte[] b3 = new byte[2 * _1MB];
        System.out.println("3...");
        System.in.read();
    }
}

设置JVM参数

-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc

运行后需要也需要点击三次回车

使用jstat命令,如下:

第三次老年代利用率占空间当前容量的百分比、元空间利用率占空间当前容量的百分比、压缩的类空间利用率,以百分比表示等都发生了变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux:信号深入理解

文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…

CSS学习笔记之中级教程(三)

14、CSS 下拉菜单 14.1 示例1&#xff1a;普通弹窗 思路&#xff1a;弹窗内容先隐藏display: none;&#xff0c;:hover时候修改弹窗部分的 display: block; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><me…

IT学习笔记--Kafka

Kafka概述: 定义: Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;主要应用于大数据实时处理领域。 消息队列消息队列的两种模式: 点对点模式: 消息生产者生产消息发送到Queue中&#xff0c;然后消息消费者从Queue中取出并且消费消息。 消息被消费以后&#…

C语言游戏实战(12):植物大战僵尸(坤版)

植物大战僵尸 前言&#xff1a; 本游戏使用C语言和easyx图形库编写&#xff0c;通过这个项目我们可以深度的掌握C语言的各种语言特性和高级开发技巧&#xff0c;以及锻炼我们独立的项目开发能力&#xff0c; 在开始编写代码之前&#xff0c;我们需要先了解一下游戏的基本规则…

git拉取项目前需要操作哪些?

1.输入 $ ssh-keygen -t rsa -C "秘钥说明" 按enter键 2.出现 ssh/id_rsa&#xff1a;(输入也可以不输入也可以) 然后按enter键 3.出现empty for no passphrase&#xff1a;(输入也可以不输入也可以) 然后按enter键 4.出现same passphrase again: (输入也可以不输入也…

FreeRTOS_互斥量_学习笔记

互斥量 数值只有0或1 谁获得互斥量&#xff0c;就必须由谁释放同一个互斥量。 但其实在freeRTOS中&#xff0c;任务A获取的互斥锁&#xff0c;任务B也能释放。因此谁上锁谁开锁只是约定&#xff0c;在程序实现上不是强制的。 “可重入的函数"是指&#xff1a;多个任务同时…

Python筑基之旅-MySQL数据库(一)

目录 一、MySQL数据库 1、简介 2、优点 2-1、开源和免费 2-2、高性能 2-3、可扩展性 2-4、易用性 2-5、灵活性 2-6、安全性和稳定性 2-7、丰富的功能 2-8、结合其他工具和服务 2-9、良好的兼容性和移植性 3、缺点 3-1、对大数据的支持有限 3-2、缺乏全文…

OSPF路由聚合

原理概述 与RIP不同&#xff0c;OSPF不支持自动路由聚合&#xff0c;仅支持手动路由聚合。OSPF的路由聚合有两种机制&#xff1a;区域间路由聚合和外部路由聚合。区域间路由聚合必须配置在ABR路由器上&#xff0c;指的是ABR在把与自己直接相连区域&#xff08;Area&#xff09…

运营美区TikTok小店常见问题汇总,你中了几个?

大家好&#xff0c;我是IPdodo的小编&#xff0c;专注于分享出海网络解决方案&#xff0c;致力于为TikTok运营人提供解决视频0播放、直播间卡顿、不进人甚至封号等问题的跨境网络专线。目前已经帮助数千位用户成功开启跨境业务。 今天&#xff0c;将针对美区TikTok小店的常见问…

树莓派学习笔记——树莓派的三种GPIO编码方式

1、板载编码&#xff08;Board pin numbering&#xff09;: 板载编码是树莓派上的一种GPIO引脚编号方式&#xff0c;它指的是按照引脚在树莓派主板上的物理位置来编号。这种方式对于初学者来说可能比较直观&#xff0c;因为它允许你直接根据引脚在板上的位置来编程。 2、BCM编…

CasaOS系统玩客云安装内网穿透工具实现无公网IP远程访问

文章目录 前言1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 前言 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&am…

“手撕”String类+练习题

一、什么是String类 简单讲&#xff1a;是一个类&#xff01;创建字符串和字符串方法的类。 用 圈起来的叫字符&#xff0c;比如&#xff1a;a,b....里面只能有一个char类型的字符。 用" "圈起来的叫字符串&#xff0c;比如&#xff1a;"abc"..里面可以连…

2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新

v2.0.4更新 v2.0.4更新 2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新-增加ai绘画接口增加淘宝联想词接口底部增加联系方式 更新日志 底部增加联系方式 增加ai绘画接口 增加淘宝联想词接口 增加用户中心充值提示 用户中心内页颜色改版完成 截图 部分具体更新接口信…

Python 渗透测试:Redis 数据库 弱密码测试.(6379端口)

什么是 Redis 数据库 Redis (Remote Dictionary Server) 是一个开源的、内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等&#xff0…

9、QT—SQLite使用小记

前言 开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 sqlite版本&#xff1a;sqlite3 文章目录 一、Sqlite是什么二、sqlite使用步骤2.1 下载2.2 安装2.3 使用 三、Qt集成sqlite33.1 关键问题3.2 封装sql…

JAVA开发 基础Jaccard来计算两个字符串之间的重复率

计算两个字符串之间的重复率 Jaccard实现代码基于最长公共子序列来计算两个字符串之间的重复率 Jaccard Jaccard方法&#xff0c;也称为Jaccard相似度或Jaccard相似系数&#xff0c;是一种用于衡量两个集合相似程度的指标。其逻辑基于集合之间的交集与并集的关系来衡量它们的相…

5.23-

回顾 I0多路复用的原理? 程序首先向操作系统发起一个IO多路复用请求&#xff0c;告诉操作系统需要监视哪些IO通道。这些IO通道可以包括网络套接字、文件描述符等操作系统随后会将这些IO通道放入一个队列中&#xff0c;并在某个IO通道就绪时&#xff08;如数据到达、文件可读…

Aws EC2 + Aws Cli + Terraform

1 什么是 Terraform&#xff1f; Terraform 是由 HashiCorp 创建的“基础架构即代码”(Infrastructure-as-Code&#xff0c;IaC)开源工具。Terraform 的配置语言是 HashiCorp Configuration Language&#xff08;HCL&#xff09;&#xff0c;用来替代更加冗长的 JSON 和 XML 等…

7---Linux调试器gdb及拓展知识

一、先决知识补充&#xff1a; 1.1为什么测试人员需要测试的版本必须是release版本而不是debug版本&#xff1f; release版本是用户使用到的版本&#xff0c;release版本能够提供更真实的性能表现、完整的代码逻辑、安全性、稳定性以及用户体验。测试release版本可以确保用户…

基于深度学习PET/CT放射学的预后价值:未来在晚期鼻咽癌个体化诱导化疗中的潜在作用 | 文献速递-深度学习结合影像组学

Title 题目 Prognostic Value of Deep Learning PET/CT-BasedRadiomics: Potential Role for Future IndividualInduction Chemotherapy in AdvancedNasopharyngeal Carcinoma 基于深度学习PET/CT放射学的预后价值&#xff1a;未来在晚期鼻咽癌个体化诱导化疗中的潜在作用 0…