Jstat命令解析

news2024/10/6 16:16:26

Jstat命令解析

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

使用时,需加上查看进程的进程id,和所选参数。参考格式如下:jstat -options

jstat -options

-class  (类加载器)显示ClassLoad的相关信息

-compiler (JIT)显示JIT编译的相关信息

-gc (GC堆状态)显示和gc相关的堆信息

-gccapacity (各区大小)显示各个代的容量以及使用情况

-gccause 显示垃圾回收的相关信息(-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;

-gcmetacapacity  显示metaspace的大小

-gcnew 显示新生代信息

-gcnewcapacity显示新生代大小和使用情况

-gcold 显示老年代和永久代的信息

-gcoldcapacity 显示老年代的大小

-gcutil显示垃圾收集信息

-printcompilation输出JIT编译的方法信息

示例一:-class

显示加载class的数量,及所占空间等信息。

jstat -class <pid>

下面对返回的参数做了详解

Loaded 已经装载的类的数量

Bytes  装载类所占用的字节数

Unloaded 已经卸载类的数量

Bytes 卸载类的字节数

Time 装载和卸载类所花费的时间

示例二: -compiler

显示VM实时编译(JIT)的数量等信息。

jstat -compiler <pid>

 下面对返回的参数做了详解

Compiled 编译任务执行数量

Failed 编译任务执行失败数量

Invalid 编译任务执行失效数量

Time 编译任务消耗时间

FailedType 最后一个编译失败任务的类型

FailedMethod 最后一个编译失败任务所在的类及方法

示例三: -gc

显示gc相关的堆信息,查看gc的次数,及时间。

jstat –gc <pid>

下面对返回的参数做了详解

S0C 年轻代中第一个survivor(幸存区)的容量 (字节)

S1C年轻代中第二个survivor(幸存区)的容量 (字节)

S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC 年轻代中Eden(伊甸园)的容量 (字节)

EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC Old代的容量 (字节)

OU Old代目前已使用空间 (字节)

MC metaspace(元空间)的容量 (字节)

MU metaspace(元空间)目前已使用空间 (字节)

YGC 从应用程序启动到采样时年轻代中gc次数

YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

FGC 从应用程序启动到采样时old代(全gc)gc次数

FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT 从应用程序启动到采样时gc用的总时间(s)

备注:只展示后几位

jstat -gc 39557 2s 10 |awk '{print $13,$14,$15,$16,$17}'

 

 

示例四:-gccause

jstat -gccause PID

查看当前jvm的GC情况

下面对返回的参数做了详解

S0 — Heap上的 Survivor space 0 区已使用空间的百分比     

S1 — Heap上的 Survivor space 1 区已使用空间的百分比     

E   — Heap上的 Eden space 区已使用空间的百分比    

O   — Heap上的 Old space 区已使用空间的百分比     

P   — Perm space 区已使用空间的百分比

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)     

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)     

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

LGCC — 上次GC的原因

GCC — 当前GC的原因

 

示例五:-gcutil

jstat -gcutil 39557 2s 3

使用 jstat -gcutil ${pid}  2s 每隔一秒打印一次 GC 统计信息统计3次

 

下面对返回的参数做了详解

S0 —年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E 年轻代中Eden(伊甸园)已使用的占当前容量百分比

O old代已使用的占当前容量百分比

P perm代已使用的占当前容量百分比

YGC 从应用程序启动到采样时年轻代中gc次数

YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

FGC 从应用程序启动到采样时old代(全gc)gc次数

FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT 从应用程序启动到采样时gc用的总时间(s)

其他可参考:jstat命令详解[通俗易懂]-腾讯云开发者社区-腾讯云

示例六:查看JVM中堆内存使用情况

jmap -heap 进程号

通过jmap -heap 进程号查看堆默认分配情况为

最大堆内存为1024MB新生代分配大小:341MB
Eden区:340MB
From区、To区:0.5MB
OLd区:683MB

参考:https://www.jianshu.com/p/67a0c4a7b955

Jstat的实践

0、查询进程号

$jps

或ps -ef |grep jar

 

1、#查询使用空间百分比(-gccause 或-gcutil都可以)

jstat -gccause PID 2s 3  

每隔2s输出当前jvm的GC情况,总共输出3次,主要查询使用空间百分比

 YGC:848

YGCT:10.824s   (单位为秒)

FGC:3次

FGCT:0.912 (单位为秒)

解析:

YGC 从应用程序启动到采样时年轻代中gc次数

YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

FGC 从应用程序启动到采样时old代(全gc)gc次数

FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

2、#查询当前jvm使用情况

jstat -gc PID

YGC:847

YGCT:10.812s   (单位为秒)

FGC:3次

FGCT:0.912 (单位为秒)

解析:

YGC 从应用程序启动到采样时年轻代中gc次数

YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

FGC 从应用程序启动到采样时old代(全gc)gc次数

FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

 3、查看下进程的运行时间

ps -p pid -o etime

4、如何确认你JVM的YGC是否合适?

两个维度:单位时间执行次数和执行时间(GC耗时)

(1-2命令中一个和3命令结合使用)

  1. 单位时间执行次数(YGC频率)

计算公式:3的命令得出的时间/YGC(8*60+32)*60/847=36秒

结论:可以看到该进程总共运行8个多小时,前面的截图可以看到YGC了847次,平均每36秒YGC一次,是健康的GC频次

  1. 执行时间(YGC耗时)

计算公式:YGCT/YGC平均每次YGC花费12.76毫秒(10.812(s)/847=12.76ms

结论:单次Young GC平均耗时12.76ms左右,是健康的GC耗时

备注:

如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化;如果单次GC耗时超过1〜3 秒,或者频繁G C ,则必须优化。

如果满足下面的指标,则一般不需要进行GC:
YoungGC频次不超过3秒/次。(经验值3秒~10秒/次都是比较合理的YGC频率,10秒以上比较空闲)

每次YoungGC时间不超过15mss;
■ Full GC执行时间不到1s;

Full GC 频率多高

看这个频率和看YoungGC的频率是一样的,可以看高峰时期某几次的平均值。这个Full GC是很耗时的,Full GC的频率我们最好控制在一天1次或者几天一次的范围。特别是对时效性要求比较高的系统,一定要减少Full GC次数。

参考:

3s一次YoungGC的频率,甚至频率更低,5s一次,7s一次,这是正常的;

如果超过1s一次YoungGC的频率,0.5s一次YGC(GC比较频繁,那么Yong GC对系统响应的压力就比较明显了)

那你可以尝试优化JVM参数或增加服务器配置了。

其他参考:YoungGC频次不超过3秒/次

如果YGC频率远高于这个值,例如20秒/次,30秒/次,甚至60秒/次,这种情况下,说明JVM相当空闲,处于基本上无事可做的状态。建议缩容,减少服务器浪费;

如果YoungGC频率远低于这个值,例如1秒/次,甚至1秒/好多次,这种情况下,JVM相当繁忙,建议follow如下步骤进行初步症断:

检查Young区,Young区在整个堆占比在25%~40%比较合理,如果Young区太小,建议扩大Xmn。

检查SurvivorRatio,保持默认值8即可,Eden:S0:S1=8:1:1是一个比较合理的值;

参考:https://blog.csdn.net/msbjyJava/article/details/106547105

学习参考:https://blog.csdn.net/qq_39002724/article/details/112338766

https://blog.csdn.net/Qgwperfect/article/details/108089353

JVM其他参数介绍:

 

 

常用的参数介绍:

-Xms512m 设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx512m ,设置JVM最大可用内存为512M。

-Xmn200m:设置年轻代大小为200M。此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是(eden+1 survivor space)不同的。

计算公式有:

年老代大小=-Xmx减去-Xmn

整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。

持久代一般固定大小为64m,所以增大年轻代(-Xmn)后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-XX:SurvivorRatio

用于设置Eden和其中一个Survivor的比值,默认比例为8(Eden):1(一个survivor),这个值也比较重要。

例如:–XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6。

-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

-Xloggc:file

 与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。

 若与verbose命令同时出现在命令行中,则以-Xloggc为准。

-Xprof

 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。

-Xrunhprof

-Xdebug:JVM调试参数,用于远程调试

例如在tomcat中的远程调试设置方法为-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

-Xbootclasspath:

-Xbootclasspath用来指定你需要加载,但不想通过校验的类路径。JVM 会对所有的类在加载前进行校验并为每个类通过一个int数值来应用。这个是保证 JVM稳定的必要过程,但比较耗时,如果你希望跳过这个过程,就把你的类通过这个参数来指定。-Xbootclasspath参数、java -jar参数运行应用时classpath的设置方法

-Xnoclassgc:

 -Xnoclassgc 表示不对方法区进行垃圾回收。请谨慎使用。见GC 的算法分析、各类垃圾收集器介绍

-XX:MaxMetaspaceSize

java8中-XX:MaxMetaspaceSize=10M设置MetaSpace的最大值为10m。默认是Java的Metaspace空间:不受限制

参考:https://cloud.tencent.com/developer/article/2063186

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

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

相关文章

单元测试与端到端测试——主要区别

目录 前言&#xff1a; 什么是单元测试&#xff1f; 单元测试生命周期 单元测试的好处 那么它有什么好处呢&#xff1f; 单元测试示例 单元测试的类型 单元测试工具 什么是端到端测试&#xff1f; 端到端测试 端到端测试的主要好处是什么&#xff1f; 端到端测试示…

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools&#xff0c;其中使用了 tauri 提供的 fetch API&#xff0c;在开发调试过程中遇到了一些权限和参数问题&#xff0c;在此记录下来。 权限配置 在 tauri 应用中&#xff0c;如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式&#xff08;Regular Expression&#xff0c;简称为RegExp或Regex&#xff09;是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…

SpringBoot第25讲:SpringBoot对TypeHandler的使用

SpringBoot第25讲&#xff1a;SpringBoot对TypeHandler的使用 本文是SpringBoot第25讲&#xff0c;SpringBoot对TypeHandler的使用&#xff0c;TypeHandler就是当SpringBoot 实体类中字段类型和数据库中字段类型不一致时进行使用。 文章目录 SpringBoot第25讲&#xff1a;Sprin…

基环树学习笔记

0.前言 只因环树学习笔只因。 如有错误欢迎指出。 1.基本概念 这名字读起来感觉有点矛盾&#xff0c;怎么可能树上面有一个环呢&#xff1f; 我们把它放到百度翻译里面看看。 顾名思义&#xff0c;基环树不是一棵树&#xff0c;而是一颗假树&#xff0c;他的定义是&#…

Acwing.861 二分图的最大匹配(匈牙利算法)

题目 给定一个二分图&#xff0c;其中左半部包含nq个点(编号1n1)&#xff0c;右半部包含ng个点(编号1n2)&#xff0c;二分图共包含m条边。 数据保证任意—条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。 给定一个二分图G&#xff0c;在G的一个子图M中&…

软件测试基础认知

日升时奋斗&#xff0c;日落时自省 目录 1、测试需求 2、测试用例 3、软件测试BUG 4、开发模型 4.1、软件的生命周期 4.2、瀑布模型&#xff08;waterFall Model&#xff09; 4.3、螺旋模型 4.4、 增量模型 4.4.1、增量开发 4.4.2、迭代开发 4.5、敏捷开发&#xf…

【PDFBox】PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系。 目录 一、PDFBox组件 1.1、什么是PDFBox 1.2、创建PDF文档 1.3、加载PDF文档 1.4、添加空白页面 1.5、删除某个页面 1.6…

三分钟了解 SpringBoot 的启动流程

一、前言 背景&#xff1a;最近有位开发同学说面试被问到Spring Boot 的启动流程&#xff0c;以及被问到Spring Boot 的嵌入式Web容器是什么时候加载的。如何加载的。是怎么无缝切换的。 这些问题&#xff0c;其实回答起来也是比较复杂的。我们今天就从 SpringApplication.ru…

3D设计建模软件The Foundry Modo 16对Mac和Windows的系统要求

Foundry MODO是一款功能强大的三维建模、动画和渲染软件。它为艺术家和设计师提供了一套全面的工具&#xff0c;可以用来创建令人惊叹的视觉效果。无论是制作电影、电视节目、游戏还是其他数字媒体内容&#xff0c;MODO都可以满足您的需求。 MODO具有直观的用户界面&#xff0…

redis主从配置

从redis配置&#xff1a;redis6386.conf include /data/redis/redis6380.conf #主redis配置文件路径&#xff08;这里是引用主配置文件里的配置在修改从配置&#xff09; daemonize yes #在后台启动 protected-mode no #加密保护关闭 bind 192.168.3.*** requirepas…

云主机安全-私有密钥安全认证

场景描述 云主机凭借其性价比高、生配扩容便利、运维便捷、稳定性高等优势深受用户青睐&#xff0c;越来越多的企业开始租用云主机&#xff0c;将自己的服务器、业务系统等搭建或存储到云主机上。 用户痛点 用户租用或托管的云主机&#xff0c;运维端口&#xff08;远程桌面&…

SSM框架最新整合保姆级教程(IDEA版)

SSM框架最新整合保姆级教程(IDEA版) 一、环境要求 ​ 环境&#xff1a; IDEAMySQL 5.7.19Tomcat 9Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#xff0c;JavaWeb及MyBatis知识&#xff0c;简单的前端知识&#xff1b; 完整代码&#xff1a;…

Openlayers实战:绘制带箭头的线

Openlayers地图中有的时候会用到这样的场景,连续画几段线段,但是要知道绘制的方向,给人以指引的提示作用。 怎么绘制呢? 在本实战中,主要的是处理线段的显示方式,在线段的拐点处附加上箭头图片,具体看实际的源代码。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhu…

4 生成全排列

4 生成全排列 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 输入范例 : 无 输出范例 : Perm1(1):123 Perm1(2):123 Perm1(2):213 Perm1(2):321 Perm1(3):123 Perm1(3):132 Perm1(3):213 Perm1(3):231 Perm1(3):321 Perm1(3):312 Online Judge 1.0 #include<iostream> …

【全栈开发指南】数据权限使用配置

数据权限配置有两种方式&#xff1a; 通过系统配置界面&#xff0c;实时配置生效。 通过代码注解配置。 一、通过系统配置界面配置数据权限 系统配置的数据权限是通过系统配置界面将配置信息保存在数据库&#xff0c;然后系统启动时&#xff0c;将配置信息保存到Redis缓存来…

SpringCloud分布式搜索引擎、数据聚合、ES和MQ的结合使用、ES集群的问题

目录 数据聚合 聚合的分类 ​编辑 DSL实现Bucket聚合 ​编辑 DSL实现Metrics聚合​编辑 RestAPI实现聚合 对接前端接口​编辑 自定义分词器​编辑 Completion suggester查询 Completion suggester查询 酒店数据自动补全 实现酒店搜索框界面输入框的自动补全 数据同步问…

Codeforces Round 875 (Div. 1) A. Copil Copac Draws Trees

题意 Copil Copac 给定了一个由 n−1 条边组成的列表&#xff0c;该列表描述了一棵由 n 个顶点组成的树。他决定用下面的算法来绘制它&#xff1a; 步骤 0&#xff1a;绘制第一个顶点&#xff08;顶点1&#xff09;。转到步骤1。 步骤 1&#xff1a;对于输入中的每一条边&#…

Window10 系统 RabbitMQ的安装和简单使用

1、下载 & 安装 Erlang 因为RabbitMQ的服务端是基于 Erlang编写的&#xff0c;所以&#xff0c;首先需要安装Erlang。 1&#xff09;下载 下载地址如下&#xff1a; https://www.erlang.org/downloads此处下载比较慢&#xff0c;可以参考如下百度网盘&#xff1a; 链接…

常用的缓存工具有ehcache、memcache和redis,这里介绍spring中ehcache的配置。

常用的缓存工具有ehcache、memcache和redis&#xff0c;这里介绍spring中ehcache的配置。 1.在pom添加依赖&#xff1a; <!-- ehcache 相关依赖 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><ve…