JVM常用指令

1、jps

jps(java process status tool), 用于查看java进程及相关信息,如果你想找到一个java进程的pid,可以使用jps命令代替linux的ps命令。

命令格式: jps 【options】 【hostid】

options参数:

  • -l : 显示进程ID, 显示主类全名或jar路径
  • -q :显示进程ID
  • -m :显示进程ID, 显示JVM启动时传给main() 函数的参数
  • -v : 显示进程ID,显示JVM启动参数

hostid : 主机或其他服务器IP, 不写默认查看本机

2、jinfo

jinfo是用来查看jvm参数和动态修改部分jvm参数的命令

jinfo 【options】 <pid>

options参数解释:

  • no options :输出所有的系统属性和参数
  • -flag :打印指定名称的参数
  • -flag [+|-] : 打开或关闭参数
  • -flag = 设置参数值
  • -flags 打印所有参数
  • -sysprops 打印系统配置

pid代表进程id, 是必传参数

使用示例:

# 查看jvm参数和系统配置
jinfo 1234
jinfo -flags 1234
jinfo -sysprops 1234
 
# 查看打印GC日志参数
jinfo -flag PrintGC 1234
jinfo -flag PrintGCDetail 1234

# 打开/关闭 GC日志
jinfo -flag +PrintGC 1234
jinfo -flag -PrintGCDetail 1234

# 设置或自改参数值
jinfo -flag -Xms10m 1234

3、jstat

jstat命令主要用于查看jvm运行时状态信息, 包括内存状态、垃圾回收等

命令格式: jstat 【options】 <PID> 【interval】 【count】

interval 是打印间隔时间(ms), count 是打印次数, 默认一直打印

options参数解释:

  • -class : classLoader的行为统计
  • -complier : hotSpot JIT编译器行为统计
  • -gc :垃圾回收堆的行为统计
  • -gccapacity: 各个垃圾回收容量和他们响应空间的统计
  • -gcutil: 垃圾回收统计概述
  • -gccause:垃圾收集统计概述, 附加最近两次垃圾回收事件的原因
  • -gcnew:新生代行为统计
  • -gcnewcapacity:新生代与其响应的内存空间的统计
  • -gcold:老年代与永久代行为统计
  • -gcoldcapacity:老年代行为统计
  • -printcompliation: hotSpot编译方法统计

使用示例:

jstat -gcutil 1234 1000 3   # 查看进程1234的垃圾回收信息, 没1s打印一次, 打印三次

字段解释:

  • S0: s0区使用百分比

  • S1:s1区使用百分比

  • E : Eden区使用百分比

  • O : old区使用百分比

  • M: 元数据区使用百分比

  • CCS:压缩使用百分比

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

  • FGC:Full GC垃圾回收次数

  • FGCT:FullGC 垃圾回收消耗时间

  • GCT: 垃圾回收消耗总时间

    jstat -gc 1234 1000 3

-gc与-gcutil类似, 只不过输出的不是百分比,而是实际的值

字段解释:

  • S0C: so区大小
  • S1C:S1区大小
  • S0U:s0已使用大小
  • S1U:S1已使用大小
  • EC: Eden区大小
  • EU: Eden区已使用大小
  • OC: 老年代大小
  • OU:老年代已使用大小
  • MC: 方法区大小
  • MU: 方法区已使用大小
  • CCSC: 压缩类空间大小
  • CCSU: 压缩类空间已使用大小
  • YGC: 年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC: Full GC次数
  • FGCT: Full GC消耗时间
  • GCT:垃圾回收消耗总时间

4、jstack

jstack是用来查看jvm线程快照的命令, 线程快照是当前jvm线程正在执行的方法堆栈集合。 使用jstack命令可以定位线程出现长时间卡顿的原因, 如死锁、死循环等。 jstack还可以查看程序崩溃时生成的core文件中的stack信息。

命令格式: jstack 【options】 【pid】

options参数解释:

  • -F : 当使用jstack无响应时,强制输出线程堆栈
  • -m:同时输出java堆栈和c/c++ 堆栈信息
  • -l : 除了输出堆栈信息外, 显示关于锁的附加信息

5、jmap

jmap可以生成java程序的dump文件, 也可以查看堆内对象示例的统计信息、查看classLoader的信息以及finalizer队列

命令格式: jmap 【options】 <pid>

options参数解释 :

  • no options 如果使用不带选项参数的jmap打印共享对象映射, 将会打印目标虚拟机中加载的每个对象的起始地址、映射大小及共享对象文件的路径全称。(很占资源, 一般不会使用)
  • -heap: 打印java heap 摘要
  • -histo[:live] : 打印堆中的java对象统计信息
  • -clstats : 打印类加载器统计信息
  • -finalizerinfo:打印在f-queue中等待执行finalizer方法的对象
  • -dump: 生成java堆的dump文件, dump-options:
    • live : 只转储存活的对象,如果没有指定则转储所有对象
    • format=b: 二进制格式
    • file=[Path] : 将文件转储到指定文件中

使用示例:

jmap -dump:live,format=b,file=/dump.bin 1234   #将java堆中存活的对象信息转储到/dump.bin文件中

我们来看一下堆信息:

jmap -heap 1234

输出:

Attaching to process ID 11666, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.25-b02
 
using thread-local object allocation.
Parallel GC with 4 thread(s)
 
Heap Configuration: //堆内存初始化配置
 ? MinHeapFreeRatio ?= 0 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
 ? MaxHeapFreeRatio ?= 100 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
 ? MaxHeapSize= 1073741824 (1024.0MB) //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
 ? NewSize ? ?= 22020096 (21.0MB) //对应jvm启动参数-XX:NewSize=设置JVM堆的新生代的默认大小
 ? MaxNewSize = 357564416 (341.0MB) //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的新生代的最大大小
 ? OldSize ? ?= 45088768 (43.0MB) //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的老年代的大小
 ? NewRatio ? = 2 //对应jvm启动参数-XX:NewRatio=:新生代和老生代的大小比率
 ? SurvivorRatio ? ? = 8 //对应jvm启动参数-XX:SurvivorRatio=设置新生代中Eden区与Survivor区的大小比值
 ? MetaspaceSize ? ? = 21807104 (20.796875MB) // 元数据区大小
 ? CompressedClassSpaceSize = 1073741824 (1024.0MB) //类压缩空间大小
 ? MaxMetaspaceSize ?= 17592186044415 MB //元数据区最大大小
 ? G1HeapRegionSize ?= 0 (0.0MB) //G1垃圾收集器每个Region大小

Heap Usage: //堆内存使用情况
PS Young Generation 
Eden Space: //Eden区内存分布
 ? capacity = 17825792 (17.0MB) //Eden区总容量
 ? used ? ? = 12704088 (12.115562438964844MB) //Eden区已使用
 ? free ? ? = 5121704 (4.884437561035156MB) //Eden区剩余容量
 ? 71.26801434685203% used //Eden区使用比率

From Space: //其中一个Survivor区的内存分布
 ? capacity = 2097152 (2.0MB)
 ? used ? ? = 1703936 (1.625MB)
 ? free ? ? = 393216 (0.375MB)
 ? 81.25% used
To Space: //另一个Survivor区的内存分布
 ? capacity = 2097152 (2.0MB)
 ? used ? ? = 0 (0.0MB)
 ? free ? ? = 2097152 (2.0MB)
 ? 0.0% used
PS Old Generation
 ? capacity = 52428800 (50.0MB) //老年代容量
 ? used ? ? = 28325712 (27.013504028320312MB) //老年代已使用
 ? free ? ? = 24103088 (22.986495971679688MB) //老年代空闲
 ? 54.027008056640625% used //老年代使用比率
 
15884 interned Strings occupying 2075304 bytes.

输出存活对象信息 :

jmap -histo:live 1234 | more

6、jhat

jhat 用来分析jmap生成dump文件的命令, jhat内置了应用服务器,可以通过网页查看dump文件分析结果,jhat一般用于离线分析

命令格式: jhap 【options】 【dumpfile】

option参数解释:

  • -stack false : 关闭对象分配调用堆栈的跟踪
  • -refs false: 关闭对象引用的跟踪
  • -port: HTTP服务器端口, 默认是7000
  • -debug: debug级别
  • -version: 分析报告版本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值