jvm虚拟机工具
jpsjps 无参数:显示进程的ID 和 类的名称 jps 原理 java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linux中为/tmp/hsperfdata_{userName}/),有几个文件,名字就是java进程的pid,因此列出当前运行的java进程,只是把这个目录里的文件名列一下而已。 至于系统的参数什么,就可以解析这几个文件获得。 window系统显示如下:
VM.version 命令:jcmd PID VM.version
|
||
-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 队列。
参数: |
|
命令:jmap pid
|
使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。这与Solaris的pmap工具比较相似。
|
命令:jmap -heap pid 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息 |
C:\Users\jjs>jmap-heap 5932 |
命令:jmap -histo:live pid |
其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。
|
命令:jmap -clstats pid
|
-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据
|
命令: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的信息是可靠的,所以会暂停应用, 线上系统慎用。
|
jinfojinfo用法 pid 对应jvm的进程id |
|
jinfo pid |
|
命令:jinfo -flag name pid |
使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。 |
命令:jinfo -flag [+|-]name pid 描述:开启或者关闭对应名称的参数 |
使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。 使用如下:
|
命令:jinfo -flag name=value pid |
如果是设置 value值,则需要使用name=value 的形式。 使用如下: 注意事项 : jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改 |
命令:jinfo -flags pid 描述:输出全部的参数 |
|
-sysprops 命令:jinfo -sysprops pid |
|
jstatJVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heapsize和垃圾回收状况的监控。 |
||
-class显示ClassLoad的相关信息; |
|
Loaded: 已经装载的类的数量 |
-compiler显示JIT编译的相关信息; |
Compiled:编译任务执行数量 |
|
-gc显示和gc相关的堆信息; |
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
|
|
-gccapacity显示各个代的容量以及使用情况; |
NGCMN:年轻代(young)中初始化(最小)的大小(字节) |
|
-gcmetacapacity显示metaspace的大小 |
MCMN:最小元数据容量 |
|
-gcnew显示新生代信息; |
S0C :年轻代中第一个survivor(幸存区)的容量 (字节) |
|
-gcnewcapacity显示新生代大小和使用情况; |
NGCMN:年轻代(young)中初始化(最小)的大小(字节) |
|
-gcold old代对象的信息 |
MC :metaspace(元空间)的容量 (字节) |
|
old代对象的信息及其占用量 |
OGCMN:old代中初始化(最小)的大小 (字节) |
|
- gcutil 统计gc信息 |
S0 :年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 |
|
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因。 |
LGCC:最后一次GC原因 GCC:当前GC原因(No GC为当前没有执行GC)
|
|
-printcompilation 当前VM执行的信息。 |
Compiled:编译任务的数目 |
jcmd命令格式
|
|
命令:jcmd -l |
这三个命令的效果是一样的 查看性能统计 命令:jcmd pid PerfCounter.print |
命令:jcmd pid PerfCounter.print
|
|
列出当前运行的 java 进程可以执行的操作 命令:jcmd PID help |
|
查看具体命令的选项 如果想查看命令的选项,比如想查看 JFR.dump 命令选项,可以通过如下命令: |
|
1.JRF相关命令 JRF 功能跟 jmc.exe 工具的飞行记录器的功能一样的。 |
jmc.exe 显示的提示
|
VM.uptime 命令:jcmd PID VM.uptime |
|
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 |
-dump:format=b,file=heapdump.phrofpid 效果一样。 注意:如果只指定文件名,默认会生成在启动 JVM 的目录里。 |
VM.system_properties 命令:jcmd PID VM.system_properties |
|
VM.flags 命令:jcmd PID VM.flags |
|
VM.command_line 命令:jcmd PID VM.command_line |
|
GC.run_finalization 命令:jcmd PID GC.run_finalization |
执行一次finalization操作,相当于执行java.lang.System.runFinalization() |
GC.run 命令:jcmd PID GC.run |
告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。 |
PerfCounter.print 命令:jcmd PID PerfCounter.print |
|
VM.version 命令:jcmd PID VM.version |
|