当前位置: 首页 > news >正文

002-JVM 常用命令

JVM 常用命令

    • 一、jstat
      • 1、语法
      • 2、垃圾收集
      • 3、运行期编译状况
      • 4、类加载
      • 5、GC 原因
      • 5、示例
    • 二、jmap
      • 1、语法
      • 2、示例

一、jstat

常用于 GC 分析

jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的一个可以监控Java虚拟机各种运行状态信息的命令行工具。它可以显示Java虚拟机中的类加载、内存、垃圾收集、即时编译等运行状态的信息。

1、语法

  • jstat -help
  • jstat -options vmid [interval] [count]
-options说明
-class类加载统计,显示类加载、卸载数量、总空间和装载耗时的统计信息
-compiler编译统计,显示即时编译的方法、耗时等信息
-gc垃圾回收统计
-gccapacity堆内存统计
-gccause近一次GC统计和原因
-gcmetacapacity元数据空间统计
-gcnew新生代垃圾回收统计
-gcnewcapacity新生代内存统计
-gcold老年代垃圾回收统计
-gcoldcapacity老年代内存统计
-gcutil垃圾回收统计(百分比)
-printcompilationJVM编译方法统计                            

vmid:虚拟机唯一ID(LVMID,Local Virtual Machine Identifier),如果查看本机就是Java进程的进程 ID(PID)
interval:显示信息的时间间隔,单位默认毫秒。也可以指定秒为单位,比如:1s。

如果指定了该参数,jstat 命令将每隔指定时间显示一次统计信息。

count:显示统计数据的次数,默认值是无穷大,这将导致jstat命令一直显示统计信息,直到目标JVM终止或jstat命令终止。

各选项输出说明:https://www.jianshu.com/p/f02af8368a08
在这里插入图片描述
项option代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况

  • 垃圾收集
  • 运行期编译状况
  • 类加载

2、垃圾收集

  • -gc:垃圾回收统计
  • -gcnew:新生代垃圾回收统计
  • -gcold:老年代垃圾回收统计
  • -gcutil:垃圾回收统计(百分比)
Name说明
S0C第一个幸存区的大小(From Survivor 区大小)
S1C第二个幸存区的大小(To Survivor 区大小)
S0U第一个幸存区的使用大小
S1U第二个幸存区的使用大小
EC伊甸园区的大小(Eden 区大小)
EU伊甸园区的使用大小
OC老年代大小
OU老年代使用大小
MC方法区大小
MU方法区使用大小
CCSC压缩类空间大小
CCSU压缩类空间使用大小
YGCYoung GC 代表Minor GC次数(系统迄今为止 YGC 次数)
YGCTYoung GC Time 代表Minor GC耗时(YGC 耗时)
FGCFull GC 代表Full GC次数
FGCT老年代垃圾回收消耗时间
GCTGC Time 代表Minor & Full GC共计耗时,垃圾回收消耗总时间(GC 总耗时,YGCT + FGCT)
TT对象在新生代存活的次数
MTT对象在新生代存活的最大次数
DSSDesired survivor size,期望幸存者大小
S0第一个幸存区百分比
S1第二个幸存区百分比
EEden 代表伊甸区使用百分比
OOld 代表老年代使用百分比
MMetaspace 元空间
CCS压缩类空间利用率为百分比
LGCC上次GC的原因
GCC当前GC的原因

3、运行期编译状况

  • -gccapacity:堆内存统计
  • -gcmetacapacity:元数据空间统计
  • -gcnewcapacity:新生代内存统计
  • -gcoldcapacity:老年代内存统计
  • -compiler:编译统计
  • -printcompilation:JVM编译方法统计
Name说明
NGCMN新生代最小容量
NGCMX新生代最大容量
NGC当前新生代容量
S0C第一个幸存区大小
S1C第二个幸存区的大小
EC伊甸园区的大小
OGCMN老年代最小容量
OGCMX老年代最大容量
OGC当前老年代大小
OC当前老年代大小
MCMN最小元数据容量
MCMX最大元数据容量
MC当前元数据空间大小
CCSMN最小压缩类空间大小
CCSMX最大压缩类空间大小
CCSC当前压缩类空间大小
YGC年轻代 gc 次数
FGC老年代 GC 次数
S0CMX最大幸存1区大小
S1CMX最大幸存2区大小
ECMX最大伊甸园区大小                              

4、类加载

  • -class 类加载统计
Name说明
Loaded加载class的数量
Bytes所占用空间大小
Unloaded未加载数量
Bytes未加载占用空间
Time时间
Compiled编译任务的数目
Failed失败数量
Invalid不可用数量
Time时间
FailedType失败类型
FailedMethod失败的方法
Size方法生成的字节码的大小
Type编译类型
Method方法                                       

5、GC 原因

https://github.com/dmlloyd/openjdk/blob/jdk8u/jdk8u/hotspot/src/share/vm/gc_interface/gcCause.hpp#L39

enum Cause {
    _java_lang_system_gc,		// System.gc()触发
    _full_gc_alot,
    _scavenge_alot,
    _allocation_profiler,
    _jvmti_force_gc, 			// JVMTI(JVM Tool Interface)触发
    _gc_locker, 				// 通过jni方式操作数组或者是字符串的时候,为了避免GC过程移动数组或字符串的内存地址,jvm实现了一个GC_locker,最后一个位于jni临界区内的线程退出临界区时,发起一次CGCause为_gc_locker的GC.
    _heap_inspection,			// jamp -hisot:live命令时会触发
    _heap_dump,					// dump 堆
    _wb_young_gc,				// whitebox测试
    _wb_conc_mark,
    _update_allocation_context_stats_inc,
    _update_allocation_context_stats_full,

    /* implementation independent, but reserved for GC use */
    _no_gc,
    _no_cause_specified,
    _allocation_failure,		// 内存分配失败触发的GC


    /* implementation specific */
    
    _tenured_generation_full,
    _metadata_GC_threshold,		// metaspace区域分配时分配不下,从而触发的GC

    _cms_generation_full,
    _cms_initial_mark,			// CMS回收器初始标记
    _cms_final_remark,			// CMS回收器最终标记
    _cms_concurrent_mark,		// CMS回收器

    _old_generation_expanded_on_last_scavenge,
    _old_generation_too_full_to_scavenge,
    _adaptive_size_policy,		// ps中动态调整堆以及各个区大小时

    _g1_inc_collection_pause,	// G1分配不下触发的GC
    _g1_humongous_allocation,	// 分配超大对象失败时触发GC

    _last_ditch_collection,		// metaspace区域分配不下时,最后的一次回收
    _last_gc_cause
};

5、示例

jstat -gc PID time count

示例:jstat -gc 82 1000 40
说明:每隔 1 秒输出一次进程号为 12141 的 GC 情况,共输出 40 次,结果如下图
在这里插入图片描述

示例集:https://blog.csdn.net/wangshuminjava/article/details/107041189?utm_source=app&app_version=5.3.1

二、jmap

常用于内存分析

jmap (Memory Map for Java) 命令用于生成堆转储快照 (一般称为 heapdump 或 dump 文件)。

jmap 的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

1、语法

【用法】

Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

【参数】

参数说明
option选项参数,不可同时使用多个选项参数
pidJava进程id
executable产生核心dump的Java可执行文件
core需要打印配置信息的核心文件
remote-hostname-or-ip远程调试的主机名或ip
server-id可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标示服务器

【option 参数】

选项说明
heap显示 Java 堆详细信息
histo输出 java heap 对象直方图数据,如果指定了 live,则仅仅统计存活的对象
clstatsJava 堆中内存的类加载器的统计信息
finalizerinfo输出等待序列的对象信息
dump <dump-options>生成堆转储快照,输出 Java heap 信息到 hprof 格式的二进制文件

dump-options:
 live:仅输出堆中存活对象信息;如果没有指定则输出堆中所有对象信息。
 format=b:二进制格式
 file=<file>:输出堆信息到文件
 示例:jmap -dump:live,format=b,file=heap.bin <pid>
F当 -dump 没有响应时,强制生成 dump 快照

2、示例

示例集:http://t.zoukankan.com/lujiango-p-9002270.html

# dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名。
jmap -dump:live,format=b,file=dump.hprof 129665

dump.hprof 这个文件可以通过工具(如 eclipse)打开:

在这里插入图片描述

# 打印heap的概要信息,GC使用的算法,heap的配置和使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况
jmap -heap 129665

# 打印等待回收的对象信息
jmap -finalizerinfo 129665
 
# Number of objects pending for finalization:0 说明当前F-Queue队列中并没有等待Finalizer线程执行finalizer方法的对象。

# 打印堆的对象统计,包括对象数、内存大小等。jmap -histo:live这个命令执行,JVM会先触发gc,然后再统计信息
jmap -histo:live 129665

# 打印Java类加载器的智能统计信息,对于每个类加载器而言,对于每个类加载器而言,它的名称,活跃度,地址,父类加载器,它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印
jmap -clstats 129665

# 强制模式。如果指定的pid没有响应,请使用jmap -dump或jmap -histo选项。此模式下,不支持live子选项
-F
例:jmap -F -histo 129665 | grep com.netflix

相关文章:

  • 数据分析报告常见步骤
  • “零”成本即可搭建OA系统,终于知道低代码平台为什么那么火
  • 【芯片前端】延迟一拍出数的握手型ram结构的一次探索
  • 计算机毕业设计php+vue基于微信小程序的高校新生报到管理小程序
  • jq/h5 实现实时获取大文件下载进度
  • 【从零开始的Java开发】2-9-3 油画商城静态网页案例
  • 计算机毕业设计ssm+vue基本微信小程序的个人健康管理系统
  • 【PTHREAD】线程互斥与同步之互斥锁
  • vscode自动生成testbench
  • 【流放之路-装备制作篇】
  • BLE错误码全面解析连接失败原因错误码解析BLE Disconnect Reason
  • Tensorflow pb模型转tflite,并量化
  • 【PTHREAD】线程状态
  • 网易云音乐项目————项目准备
  • 计算机网络——应用层の选择题整理
  • 【391天】每日项目总结系列128(2018.03.03)
  • Apache Spark Streaming 使用实例
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • es6
  • Git的一些常用操作
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • java小心机(3)| 浅析finalize()
  • js写一个简单的选项卡
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Less 日常用法
  • node学习系列之简单文件上传
  • passportjs 源码分析
  • Python学习笔记 字符串拼接
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 力扣(LeetCode)21
  • 那些被忽略的 JavaScript 数组方法细节
  • 算法---两个栈实现一个队列
  • 微信公众号开发小记——5.python微信红包
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • raise 与 raise ... from 的区别
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​linux启动进程的方式
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (70min)字节暑假实习二面(已挂)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (pojstep1.3.1)1017(构造法模拟)
  • (办公)springboot配置aop处理请求.
  • (差分)胡桃爱原石
  • (超详细)语音信号处理之特征提取
  • (二)PySpark3:SparkSQL编程
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)80c52学习之旅-起始篇
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)拼包函数及网络封包的异常处理(含代码)