《深入理解Java虚拟机》(四) 调优工具、指令

JVM 调优的概念

调优的前提是发现问题,然后通过工具定位问题并实地分析问题,最后根据问题现象选用最合适的策略优化 / 解决 问题;JVM调优的工具很多,有jdk自带的工具,例如:jvisualvm、jconsole;也有第三方的:eclipse附带的内存分析工具MAT、专业分析gc日志的工具——GChisto等。本文主要针对如下jdk自动工具进行介绍。

jps

jps 的作用是列出系统中正在运行的虚拟机线程
命令格式:

jps  [ options ]  [ hostid ]

1.options 功能选项

可单个,也可多个:

  • jps -l : 输出主类全名或jar路径
    在这里插入图片描述
    一般情况下用到最多的是 jps -l 查看应用的pid

  • jps -q : 只输出LVMID
    在这里插入图片描述

  • jps -m : 输出JVM启动时传递给main()的参数
    在这里插入图片描述

  • jps -v : 输出JVM启动时显示指定的JVM参数

  • jps -l -m
    在这里插入图片描述

2.hostid

hostid 是RMI注册表中,注册的主机名(很少用到略过)。

jstat

虚拟机统计信息监视工具
jstat 命令格式

	jstat  [ [ option ]  vmid  [ interval [s | ms] ] [ count ] ]

参数说明:

1.vmid格式

如果是本地虚拟机进程,那么它与lvmid一致,如果是远程虚拟机线程格式如下:

	[protocol:][//]lvmid[@hostname[:port]/servername]

2.interval 和 count

interval 和 count 代表查询间隔时间和查询次数,如果不进行指定则默认查询一次,如下指令查询虚拟机进程15196,每隔 500毫秒打印一次共计5次;
在这里插入图片描述

3.option

option 是监视选项

  • -class class loader的行为统计
    在这里插入图片描述
    共计装载7478个类,总空间13498.5 Byte ; 卸载1个类,总空间... ;Time代表耗时

  • -compiler 输出编译器编译过的方法、耗时....
    在这里插入图片描述

  • -gc 垃圾回收堆的行为统计
    在这里插入图片描述
    C--总容量,U--已使用的容量

      	S0C : survivor0区的总容量
      	S1C : survivor1区的总容量
      	S0U : survivor0区已使用的容量
      	S1C : survivor1区已使用的容量
      	EC : Eden区的总容量
      	EU : Eden区已使用的容量
      	OC : Old区的总容量
      	OU : Old区已使用的容量
      	MC : Metaspace 容量
      	MC : Metaspace 已用
      	YGC : 新生代垃圾回收次数
      	YGCT : 新生代垃圾回收时间
      	FGC : 老年代垃圾回收次数
      	FGCT : 老年代垃圾回收时间
      	GCT : 垃圾回收总消耗时间
    
  • -gccapacity 输出各个堆区域使用到的最大、最小空间
    在这里插入图片描述

      NGCMN :   新生代占用的最小空间
      NGCMX :   新生代占用的最大空间
      OGCMN :  老年代占用的最小空间
      OGCMX :  老年代占用的最大空间
      OGC:     当前年老代的容量 (KB)
      OC:        当前年老代的空间 (KB)
    
  • -gcutil 输出内容类似jstat -gc , -gcutil 是按照百分比输出的
    在这里插入图片描述
    S0、S1 占用为空,Eden 占用 52.18%,old--8%,Metaspace 95.25%......;young gc 5次共耗时0.027,Full GC 2次 共耗时 0.067。

  • -gccause 同-gcutil,还会输出最近两次垃圾回收事件的原因
    在这里插入图片描述

  • -gcnew 新生代行为统计
    在这里插入图片描述

      TT:Tenuring threshold(提升阈值)
      MTT:最大的tenuring threshold
      DSS:survivor区域大小 (KB)
    
  • -gcnewcapacity 同 -gcnew 但是它关注的是新生代各区域的边界
    在这里插入图片描述

  • -gcold 年老代和永生代行为统计
    在这里插入图片描述

  • -gcoldcapacity 同 -gcold 它关注的是边界
    gcoldcapacity

jinfo

jinfo可以实时查看和调整虚拟机参数,指令格式如下:

	jinfo  [ option ] pid 
		
		-flag : 输出指定args参数的值
		-flags : 不需要args参数,输出所有JVM参数的值
		-sysprops : 输出系统属性,等同于System.getProperties()

例如,查看进程 15196 的所有参数:

jinfo -flags 15196

在这里插入图片描述

jmap

jmap 是内存映射工具,用于生成堆转储快照,命令格式如下:

jmap [ option ] vmid 
  • dump : 生成堆转储快照

      jmap -dump:live,format=b,file=D:\\DUMP_FILES\\dump.hprof 15196
    

在这里插入图片描述

  • finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象

  • heap : 显示Java堆详细信息
    在这里插入图片描述

  • histo : 显示堆中对象的统计信息
    在这里插入图片描述

  • permstat : to print permanent generation statistics

  • F : 当-dump没有响应时,强制生成dump快照

jhat

jhat配合jmap使用,它可以分析jmap生成的dump快照

	jhat -J-Xmx512m D:\\DUMP_FILES\\dump.hprof

在这里插入图片描述
在这里插入图片描述

jstack

生成堆线程快照

-F : 当正常输出请求不被响应时,强制输出线程堆栈
-l : 除堆栈外,显示关于锁的附加信息
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈

在这里插入图片描述
在这里插入图片描述

jvisualvm

jvisualvm是图形化工具
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

posted @ 2021-06-19 15:16  bokerr  阅读(109)  评论(0编辑  收藏  举报