虚拟机性能监控、故障处理工具

jps:虚拟机进程状况工具

  • jps -l: 显示虚拟机运行的进程ID 和 执行的主类(Mian()函数所在的类)
    在这里插入图片描述
  • jps -v:显示虚拟机启动时被设置的参数在这里插入图片描述
  • jps -q:值显示进程ID,不显示主类信息
    在这里插入图片描述

jstat:虚拟机统计信息监视工具

  • jstat命令格式:jstat [ option vmid [ interval[s|ms] [count]]]
    • 其中vmid是虚拟机进程id 。
    • interval和count为查询间隔和次数,如果省略这个参数表示查询一次。

比如:jstat -gc 2764 250 20
其中-gc选项是查询堆中各个区(Eden区,2个Survivor区,老年代,永久代)的容量,占用空间,垃圾收集合计时间; 2764为线程id ; 250 20表示每250ms查询一次,一共查询20次。

  • jstat作用:用于监视虚拟机运行状态信息,包括类加载、垃圾收集、运行期编译状况
  • 常见的option示例
  • jstat -gc
    作用:监视java堆状况,包括Eden区,2个Survivor区,老年代,方法区等的容量已使用空间垃圾收集时间合计
    在这里插入图片描述
    S0C:Survivor0的容量
    S0U: Survivor0已经使用量
    EC: Eden区的容量
    OC:Old(老年代)容量
    MC:方法区大小
    CCSC:压缩类空间大小
    CCSU:压缩类空间使用量
    YGC:年轻代GC次数, FGC是老年代,CGC:这里的C是Concurrent,即并发垃圾收集次数
    YGCT:年轻代GC总共的耗时
    GCT:垃圾回收消耗的总时间
  • jstat -gcutil
    作用:监视内容与-gc相同,但是输出主要内容关注已使用空间占总空间的百分比
    在这里插入图片描述
    -gcutil表示的是百分比

jinfo:java配置信息工具

  • 参数作用:实时查看和调整虚拟机各项参数
  • 命令格式:jinfo [option] pid
  • 查看虚拟机SurvivorRatio参数(Survivor比Eden的比值)
  • jinfo -flag
    在这里插入图片描述
    在jdk6之后,可以通过jinfo -flag 参数名=value在虚拟机运行时更改该参数

jmap:java内存映像工具

  • 作用:生成堆转储快照,查询finalize执行队列,java堆和方法区的信息信息(空间使用率,当前用的是哪种收集器等)
    一下命令中,windows下只能用哪个-dump与-histo
  • jmap -dump
    生成java堆转储快照,命令格式:jmap -dump:[live,]format=b,file= vmid
    当有live时,表示只dump出存活的对象在这里插入图片描述
  • jmap -finalizerinfo
    显示F-Queue中等待Finalizer线程执行finalize方法的对象。
    在这里插入图片描述
    Number of objects pending for finalization:0即F-Queue中没有任何对象等待二次标记
  • jmap -heap
    显示java堆的详细信息,包括哪种收集器、参数配置、分代状况
    在这里插入图片描述
    结果解释:
using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式

using thread-local object allocation.   

Concurrent Mark-Sweep GC   ##同步并行垃圾回收

Heap Configuration:  ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]

   MinHeapFreeRatio = 40 ##最小堆使用比例

   MaxHeapFreeRatio = 70 ##最大堆可用比例

   MaxHeapSize      = 2147483648 (2048.0MB) ##最大堆空间大小

   NewSize          = 268435456 (256.0MB) ##新生代分配大小

   MaxNewSize       = 268435456 (256.0MB) ##最大可新生代分配大小

   OldSize          = 5439488 (5.1875MB) ##老年代大小

   NewRatio         = 2  ##新生代比例

   SurvivorRatio    = 8 ##新生代与suvivor的比例

   PermSize         = 134217728 (128.0MB) ##perm区 永久代大小

   MaxPermSize      = 134217728 (128.0MB) ##最大可分配perm区 也就是永久代大小

 

Heap Usage: ##堆使用情况【堆内存实际的使用情况】

New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)

   capacity = 241631232 (230.4375MB)  ##伊甸区容量

   used     = 77776272 (74.17323303222656MB) ##已经使用大小

   free     = 163854960 (156.26426696777344MB) ##剩余容量

   32.188004570534986% used ##使用比例

Eden Space:  ##伊甸区

   capacity = 214827008 (204.875MB) ##伊甸区容量

   used     = 74442288 (70.99369812011719MB) ##伊甸区使用

   free     = 140384720 (133.8813018798828MB) ##伊甸区当前剩余容量

   34.65220164496263% used ##伊甸区使用情况

From Space: ##survior1区

   capacity = 26804224 (25.5625MB) ##survior1区容量

   used     = 3333984 (3.179534912109375MB) ##surviror1区已使用情况

   free     = 23470240 (22.382965087890625MB) ##surviror1区剩余容量

   12.43827838477995% used ##survior1区使用比例

To Space: ##survior2 区

   capacity = 26804224 (25.5625MB) ##survior2区容量

   used     = 0 (0.0MB) ##survior2区已使用情况

   free     = 26804224 (25.5625MB) ##survior2区剩余容量

   0.0% used ## survior2区使用比例

PS Old  Generation: ##老年代使用情况

   capacity = 1879048192 (1792.0MB) ##老年代容量

   used     = 30847928 (29.41887664794922MB) ##老年代已使用容量

   free     = 1848200264 (1762.5811233520508MB) ##老年代剩余容量

   1.6416783843721663% used ##老年代使用比例

Perm Generation: ##永久代使用情况

   capacity = 134217728 (128.0MB) ##perm区容量

   used     = 47303016 (45.111671447753906MB) ##perm区已使用容量

   free     = 86914712 (82.8883285522461MB) ##perm区剩余容量

   35.24349331855774% used ##perm区使用比例
  • jmap -histo
    打印堆中对象的统计信息。每个class的实例数目,实例总内存占用,类的全名。JVM内部类的话在类的开头加*,如果有live表示只统计存活的对象数量
    jmap -histo<:live> vmid
    在这里插入图片描述

  • ==jmap -permstat ==
    显示永久代内存状态。包含类加载器名称、加载的class数量、父加载器、加载器是否存活,加载器地址
    jmap -permstat vmid在这里插入图片描述

jhat:虚拟机堆转储快照分析工具

对jmap -dump生成的转储快照进行分析。一般用别的工具堆heapdump文件进行分析,不用这个指令。

jstack:java堆栈跟踪工具

  • 作用:生成虚拟机当前时刻的线程快照(ThreadDump),即当前每条线程正在执行的方法栈。
  • 目的:当想知道线程没有响应的原因(可能发生死锁、死循环、请求外部资源被长时间挂起),通过jstack来查看当前各个线程的调用堆栈,找原因。

jstack -l vmid
-l:除了显示栈信息,还显示关于锁的信息
在这里插入图片描述
上图是截的是mian线程的信息。
main:线程名字
#1:栈中第几个线程
prio:线程优先级
os_prio:线程操作系统优先级
cup:cpu运行时间
elapsed:实际运行时间
jstack -m vmid
-m:如果调用了本地方法,显示本地方法栈(C/C++)的信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值