jvm虚拟机工具

 

                                                       jps

jps

无参数:显示进程的ID 和 类的名称

jps 原理

java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linux中为/tmp/hsperfdata_{userName}/),有几个文件,名字就是java进程的pid,因此列出当前运行的java进程,只是把这个目录里的文件名列一下而已。 至于系统的参数什么,就可以解析这几个文件获得。

window系统显示如下:

 

VM.version

命令:jcmd PID VM.version
描述:查看目标jvm进程的版本信息

 

 

-q:只输出进程 ID

jps -q

参数 -q 只输出进程ID,而不显示出类的名称

-m:输出传入 main 方法的参数

jps -m

参数 -m 可以输出传递给 Java进程(main 方法)的参数。

-l:输出完全的包名,应用主类名,jar的完全路径名

jps -l

参数 -l 可以输出主函数的完整路径(类的全路径)。

-v:输出jvm参数

jps -v

参数 -v 可以显示传递给 Java虚拟机的参数。

 

-V:输出通过flag文件传递到JVM中的参数

 

 

                                                                                    jmap                                                            

命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

 

参数:
option: 选项参数。
pid: 需要打印配置信息的进程ID。
executable: 产生核心dump的Java可执行文件。
core: 需要打印配置信息的核心文件。
server-id可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
remoteserver IP or hostname 远程调试服务器的IP地址或主机名。
option
nooption: 查看进程的内存映像信息,类似 Solaris pmap 命令。
heap: 显示Java堆详细信息
histo[:live]: 显示堆中对象的统计信息
clstats:打印类加载器信息
finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
dump:<dump-options>:生成堆转储快照
F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.
help:打印帮助信息
J<flag>:指定传递给运行jmap的JVM的参数 

命令:jmap pid
描述:查看进程的内存映像信息,类似Solaris pmap 命令。

 

使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。这与Solaris的pmap工具比较相似。

 

命令:jmap -heap pid
描述:显示Java堆详细信息

打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

C:\Users\jjs>jmap-heap 5932
Attachingto process ID 5932, please wait...
Debuggerattached successfully.
Servercompiler detected.
JVMversion is 25.91-b15
usingthread-local object allocation.
ParallelGC with 4 thread(s)
HeapConfiguration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 42991616 (41.0MB)
   MaxNewSize               = 357564416 (341.0MB)
   OldSize                  = 87031808 (83.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824(1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)
HeapUsage:
PSYoung Generation
EdenSpace:
   capacity = 60293120 (57.5MB)
   used    = 44166744 (42.120689392089844MB)
   free    = 16126376 (15.379310607910156MB)
   73.25337285580842% used
FromSpace:
   capacity = 5242880 (5.0MB)
   used    = 0 (0.0MB)
   free    = 5242880 (5.0MB)
   0.0% used
ToSpace:
   capacity = 14680064 (14.0MB)
   used    = 0 (0.0MB)
   free    = 14680064 (14.0MB)
   0.0% used
PSOld Generation
   capacity = 120061952 (114.5MB)
   used    = 19805592 (18.888084411621094MB)
   free    = 100256360 (95.6119155883789MB)
   16.496143590935453% used
20342interned Strings occupying 1863208 bytes.

命令:jmap -histo:live pid
描述:显示堆中对象的统计信息

其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。

 

命令:jmap -clstats pid
描述:打印类加载器信息

 

-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据
打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

 

命令:jmap -finalizerinfo pid
描述:打印等待终结的对象信息

Numberof objects pending for finalization: 0 说明当前F-QUEUE队列中并没有等待Fializer线程执行final 

命令:jmap -dump:format=b,file=heapdump.phrof pid
描述:生成堆转储快照dump文件。

以hprof二进制格式转储Java堆到指定filename的文件中。live子选项是可选的。如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览heap dump,你可以使用jhat(Java堆分析工具)读取生成的文件。

这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用。

 

 

                                                      jinfo

jinfo用法

pid 对应jvm的进程id
executablecore 产生core dump文件
[server-id@]remoteserver IP or hostname 远程的ip或者hostname,server-id标记服务的唯一性id
option
no option输出全部的参数和系统属性
-flagname 输出对应名称的参数
-flag[+|-]name 开启或者关闭对应名称的参数
-flagname=value 设定对应名称的参数
-flags输出全部的参数
-sysprops输出系统属性
Javacore概述
Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,
能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,
JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。
应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。

jinfo pid
描述:输出当前 jvm 进程的全部参数和系统属性

命令:jinfo -flag name pid
描述:输出对应名称的参数

使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。 

命令:jinfo -flag [+|-]name pid 描述:开启或者关闭对应名称的参数

使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。

使用如下:

 

命令:jinfo -flag name=value pid
描述:修改指定参数的值。同示例三,但示例三主要是针对 boolean 值的参数设置的。
 

如果是设置 value值,则需要使用name=value 的形式。

使用如下:

注意事项 :

jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改

命令:jinfo -flags pid
描述:输出全部的参数

 

 

-sysprops

命令:jinfo -sysprops pid
描述:输出当前 jvm 进行的全部的系统属性

 

                                                        jstat

JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heapsize和垃圾回收状况的监控。

-class显示ClassLoad的相关信息;

Loaded: 已经装载的类的数量
Bytes: 装载类所占用的字节数
Unloaded:已经卸载类的数量
Bytes:卸载类的字节数
Time:装载和卸载类所花费的时间

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

Compiled:编译任务执行数量
Failed:编译任务执行失败数量
Invalid:编译任务执行失效数量
Time :编译任务消耗时间
FailedType:最后一个编译失败任务的类型
FailedMethod:最后一个编译失败任务所在的类及方法

-gc显示和gc相关的堆信息;

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)

 

-gccapacity显示各个代的容量以及使用情况;

NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC :年轻代(young)中当前的容量 (字节)
S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
S1C : 年轻代中第二个survivor(幸存区)的容量 (字节)
EC :年轻代中Eden(伊甸园)的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC:old代当前新生成的容量 (字节)
OC :Old代的容量 (字节)
MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
MCMX :metaspace(元空间)的最大容量 (字节)
MC :metaspace(元空间)当前新生成的容量 (字节)
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC :从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcmetacapacity显示metaspace的大小

MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC :从应用程序启动到采样时年轻代中gc次数
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

-gcnew显示新生代信息;

S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
S1C :年轻代中第二个survivor(幸存区)的容量 (字节)
S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT:持有次数限制
MTT:最大持有次数限制
DSS:期望的幸存区大小
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

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

NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC :年轻代(young)中当前的容量 (字节)
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcold

old代对象的信息

MC :metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

old代对象的信息及其占用量

OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC :old代当前新生成的容量 (字节)
OC :Old代的容量 (字节)
YGC :从应用程序启动到采样时年轻代中gc次数
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

- gcutil

统计gc信息

 

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)

-gccause

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

LGCC:最后一次GC原因

GCC:当前GC原因(No GC为当前没有执行GC)

 

 

-printcompilation

当前VM执行的信息。

 

Compiled:编译任务的数目
Size :方法生成的字节码的大小
Type:编译类型
Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+

                     jcmd

命令格式
  jcmd <pid | main class> <command ...| PerfCounter.print | -f  file>
  jcmd -l
  jcmd -h
描述
    pid:接收诊断命令请求的进程ID。
    main class :接收诊断命令请求的进程的main类。匹配进程时,main类名称中包含指定子字符串的任何进程均是匹配的。如果多个正在运行的Java进程共享同一个main类,诊断命令请求将会发送到所有的这些进程中。
    command:接收诊断命令请求的进程的main类。匹配进程时,main类名称中包含指定子字符串的任何进程均是匹配的。如果多个正在运行的Java进程共享同一个main类,诊断命令请求将会发送到所有的这些进程中。
注意: 如果任何参数含有空格,你必须使用英文的单引号或双引号将其包围起来。 此外,你必须使用转义字符来转移参数中的单引号或双引号,以阻止操作系统shell处理这些引用标记。当然,你也可以在参数两侧加上单引号,然后在参数内使用双引号(或者,在参数两侧加上双引号,在参数中使用单引号)。
    Perfcounter.print:打印目标Java进程上可用的性能计数器。性能计数器的列表可能会随着Java进程的不同而产生变化。
    -f file:从文件file中读取命令,然后在目标Java进程上调用这些命令。在file中,每个命令必须写在单独的一行。以"#"开头的行会被忽略。当所有行的命令被调用完毕后,或者读取到含有stop关键字的命令,将会终止对file的处理。
    -l:查看所有的进程列表信息。
    -h:查看帮助信息。(同 -help)

 

命令:jcmd -l
描述:查看 当前机器上所有的 jvm 进程信息

 

这三个命令的效果是一样的

查看性能统计

命令:jcmd pid PerfCounter.print
描述:查看指定进程的性能统计信息。

命令:jcmd pid PerfCounter.print
描述:查看指定进程的性能统计信息。 

 

列出当前运行的 java 进程可以执行的操作

命令:jcmd PID help

查看具体命令的选项

如果想查看命令的选项,比如想查看 JFR.dump 命令选项,可以通过如下命令:
jcmd 11772 help JFR.dump

1.JRF相关命令

JRF 功能跟 jmc.exe 工具的飞行记录器的功能一样的。
要使用 JRF 相关的功能,必须使用VM.unlock_commercial_features 参数取消锁定商业功能 。

 

jmc.exe 显示的提示

  • 启动JFR
    执行命令:jcmd $PID JFR.start name=abc,duration=120s
  • Dump JFR
    等待至少duration(本文设定120s)后,执行命令:jcmd PID JFR.dump name=abc,duration=120s filename=abc.jfr(注意,文件名必须为.jfr后缀)
  • 检查JFR状态
    执行命令:jcmd $PID JFR.check name=abc,duration=120s
  • 停止JFR
    执行命令:jcmd $PID JFR.stop name=abc,duration=120s
  • JMC分析
    切回开发机器,下载步骤3中生成的abc.jfr,打开jmc,导入abc.jfr即可进行可视化分析

VM.uptime

命令:jcmd PID VM.uptime
描述:查看 JVM 的启动时长:

GC.class_histogram

命令:jcmd PID GC.class_histogram
描述:查看系统中类统计信息

 

这里和jmap -histo pid的效果是一样的
这个可以查看每个类的实例数量和占用空间大小。

Thread.print

命令:jcmd PID Thread.print
描述:查看线程堆栈信息。

该命令同 jstack命令。

GC.heap_dump

命令:jcmd PID GC.heap_dump FILE_NAME
描述:查看 JVM 的HeapDump

-dump:format=b,file=heapdump.phrofpid 效果一样。
导出的 dump 文件,可以使用MAT 或者 Visual VM 等工具进行分析。

注意:如果只指定文件名,默认会生成在启动 JVM 的目录里。

VM.system_properties

命令:jcmd PID VM.system_properties
描述:查看 JVM 的属性信息

 

VM.flags

命令:jcmd PID VM.flags
描述:查看 JVM 的启动参数

VM.command_line

命令:jcmd PID VM.command_line
描述:查看 JVM 的启动命令行

GC.run_finalization

命令:jcmd PID GC.run_finalization
描述:对JVM 执行 java.lang.System.runFinalization()

执行一次finalization操作,相当于执行java.lang.System.runFinalization()

GC.run

命令:jcmd PID GC.run
描述:对 JVM 执行java.lang.System.gc()

告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。

PerfCounter.print

命令:jcmd PID PerfCounter.print
描述:查看 JVM 性能相关的参数

VM.version

命令:jcmd PID VM.version
描述:查看目标jvm进程的版本信息

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值