JVM 分析工具和查看命令

Java Development Kit (JDK) 命令行 工具

监视JVM

jps 虚拟机进程状况工具

(JavaVirtual Machine Process Status Tool)

命令格式:jps [options] [<hostid>]
-options

  • -q : 抑制类名的输出,JAR文件名和传递给main方法的参数,仅生成本地JVM标识符列表。
  • -m: 显示传递给该main方法的参数。输出可能是null嵌入式JVM。
  • -l : 显示应用程序main类的完整包名或应用程序的JAR文件的完整路径名。
  • -v : 显示传递给JVM的参数。
  • -V : 抑制类名的输出,JAR文件名和传递给main方法的参数,仅生成本地JVM标识符的列表。
  • -Joption : 传递option给JVM,其中的选项是optionsJava应用程序启动器的参考页面中描述的选项之一。,例如,-J-Xms48m将启动内存设置为48 MB。

-hostid :
[protocol:][[//]hostname][:port][/servername]

  • 输出格式
    lvmid [ [ classname | JARfilename | “Unknown”] [ arg* ] [ jvmarg* ] ]

jstat 虚拟机统计信息监控工具

Java Virtual Machine statistics monitoring tool
Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:
类的加载及卸载情况
查看新生代、老生代及metaSpace的容量及使用情况
查看新生代、老生代及metaSpace的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
查看新生代中Eden区及Survior区中容量及分配情况等

jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数 。

语法格式如下:

命令格式: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option: 参数选项

  • -class 显示ClassLoad的相关信息;
  • -compiler 显示JIT编译的相关信息;
  • -gc 显示和gc相关的堆信息;
  • -gccapacity    显示各个代的容量以及使用情况;
  • -gcmetacapacity 显示metaspace的大小
  • -gcnew 显示新生代信息;
  • -gcnewcapacity 显示新生代大小和使用情况;
  • -gcold 显示老年代和永久代的信息;
  • -gcoldcapacity 显示老年代的大小;
  • -gcutil   显示垃圾收集信息;
  • -gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;

-t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
vmid: Virtual Machine ID( 进程的 pid)
interval: 执行每次的间隔时间,单位为毫秒
count: 用于指定输出多少次记录,缺省则会一直打印

表头讲解

表头描述jdk 版本
S0年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
S0C新生代中Survivor space中S0当前容量的大小(KB)
S1C新生代中Survivor space中S1当前容量的大小(KB)
S0U新生代中Survivor space中S0容量使用的大小(KB)
S1U新生代中Survivor space中S1容量使用的大小(KB)
S0CMX年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX年轻代中第二个survivor(幸存区)的最大容量 (字节)
E年轻代中Eden(伊甸园)已使用的占当前容量百分比
Oold代已使用的占当前容量百分比
OGCold代当前新生成的容量 (字节)
ECEden space 当前容量的大小(KB)
EUEden space 容量使用的大小(KB)
OCOld space 当前容量的大小(KB)
OUOld space 使用容量的大小(KB)
PCPermanent space 当前容量的大小(KB)1.8以下
PUPermanent space 使用容量的大小(KB)1.8以下
MMeteSpace已使用的占当前容量百分比
MCMeteSpace 当前容量的大小(KB)1.8及以上
MUMeteSpace 使用容量的大小(KB)1.8及以上
CCSC压缩类空间大小(KB)1.8及以上
CCSU压缩类空间大小(KB)1.8及以上
YGC从应用程序启动到采样时发生 Young GC 的次数
YGCT从应用程序启动到采样时 Young GC 所用的时间(秒)
FGC从应用程序启动到采样时发生 Full GC 的次数
FGCT从应用程序启动到采样时 Full GC 所用的时间(秒)
CGC从应用程序启动到采样时 发生并发GC Stop-The-World的次数
CGCT从应用程序启动到采样时 发生并发GC Stop-The-World 所用的时间(秒)
GCT从jvm启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
示例
jstat  -gc -h5  -t 26316 1s 20

-gc 选项
-h5 每隔5行显示一下表头
-t 显示从虚拟机启动在当前时间的时间间隔 单位:秒
26536 线程id
2s 1秒显示一次
20 总共显示20次
在这里插入图片描述

故障排除

jinfo 实时查看和调整JVM配置参数

Java Configuration Info,主要作用是实时查看和调整JVM配置参数。

命令格式:jinfo [option] <pid>
Usage:

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

where is one of:

  • -flag <name> to print the value of the named VM flag(打印指定命令行标志的名称和值)
  • -flag [+|-]<name> to enable or disable the named VM flag(启用或禁用指定的布尔命令行标志)
  • -flag <name>=<value> to set the named VM flag to the given value(将指定的命令行标志设置为指定的值)
  • -flags to print VM flags( 打印传递给JVM的命令行标志)
  • -sysprops to print Java system properties(打印Java系统属性)
  • <no option> to print both of the above
  • -h | -help to print this help message

jmap 生成虚拟机的内存转储快照(heapdump文件)

Java Memory Map, 主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。

命令格式:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP

  • option: 选项参数。
    • no option: 查看进程的内存映像信息,类似 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的参数
  • pid: 需要打印配置信息的进程ID。
  • executable: 产生核心dump的Java可执行文件。
  • core: 需要打印配置信息的核心文件。
  • server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
  • remote server IP or hostname 远程调试服务器的IP地址或主机名。

jhat 分析内存转储快照,不推荐使用,而且慢

Java Heap Analyse Tool,是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言.

命令格式: jhat [ options ] <heap-dump-file>
参数:
options 如果使用,应该紧跟在命令之后。
heap-dump-file java二进制堆镜像,对于包含多个堆镜像的,你可以用#指定文件中的堆,例如 “foo.hprof#3”

OPTIONS
-stack false/true 关闭跟踪对象分配调用栈。注意,如果堆镜像中分配位置信息不可用,你不得不设置成false。默认是true。
-refs false/true 关闭跟踪对象引用。默认是true。默认情况下,back pointers(指向给定对象a.ka的引用,或者in-coming应用)适用于堆中的所有对象。
-port port-number 给jhat的HTTP服务器设置端口。默认是7000。
-exclude exclude-file 指定一个数据成员列表文件,排除可达对象查询。例如,如果文件列出 java.lang.String.value,那么,从指定对象o中计算出的可达对象列表,只要引用路径涉及java.lang.String.value 字段将不会被考虑在内。
-baseline baseline-dump-file 指定一个基线堆镜像。两个堆中的相同对象ID将被标记为非new。其他对象标记为new。对于比较两个不同的堆镜像是有用的。
-debug int 设置debug级别。0 debug输出。设置更高级别获得更多模式。
-version 报告版本号,退出。
-h 帮助
-help 帮助
-J<flag> JVM参数

jstack 堆栈跟踪工具

用来生成JVM中的线程快照(thread dump),其中包含有每个线程的方法调用栈以及其状态、锁信息等。

命令格式:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)

参数的含义
-F:如果正常执行jstack命令没有响应(比如进程hung住了),可以加上此参数强制执行thread dump。
-m:除了打印Java的方法调用栈之外,还会输出native方法的栈帧。
-l:打印与锁有关的附加信息。使用此参数会导致JVM停止时间变长,在生产环境需慎用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值