java虚拟机系列(四)- java虚拟机性能监控与调优

java工具包及其命令

一、jps

显示系统中正在运行的虚拟机进程

命令格式:

jps [options] [hostid]

常用参数
  • -q:只输出进程id
  • -l:输出全类名,如果是jar包输出jar包地址
  • -m:输出main方法传入的参数
  • -v:输出虚拟机进程启动参数

二、jstat

监控jvm虚拟机内存使用情况的工具。
可以用来显示系统中类装载、垃圾回收、运行期编译状况等运行数据。

命令格式:
  • jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
  • vmid:表示虚拟机唯一标识符,如果是本地虚拟机进程,与LVMID一致,通常为本地虚拟机进程号。
  • interval:表示查询间隔时间。
  • count:表示查询次数。

    如果省略interval和count参数,表示查询一次。
常用参数:
  • gc:java堆信息和垃圾回收状况.
  • gcutil:关注已使用空间占总空间比例.

java 虚拟线程 日志 java虚拟机日志如何查看_java

  • S0:表示Survivor0
  • S1:表示Survivor1
  • E:表示新生代Eden
  • O:表示老年代Old
  • M:表示元空间(P表示永久代)

    以上各参数的值表示已使用内存空间占比。
  • YGC:表示young gc次数
  • YGCT:表示young gc总耗时
  • FGC:表示Full gc次数
  • FGCT:表示full gc总耗时
  • GCT:表示所有gc总耗时时间。
  • S0C:年轻代中第一个survivor(幸存区)的容量 (KB)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (KB)
  • S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (KB)
  • S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (KB)
  • EC:年轻代中Eden(伊甸园)的容量 (KB)
  • EU:年轻代中Eden(伊甸园)目前已使用空间 (KB)
  • OC:Old代的容量 (KB)
  • OU:Old代目前已使用空间 (KB)
  • PC(MC):Perm(持久代)(元空间)的容量 (KB)
  • PU(MU):Perm(持久代)(元空间)目前已使用空间 (KB)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)

三、jstack

显示虚拟机的线程栈信息,该命令通常用于定位线程停顿原因。

命令格式:

jstack [ option ] pid

常用参数
  • -l:显示关于锁的附加信息
  • -m:显示native方法堆栈
  • -F:强制输出

java 虚拟线程 日志 java虚拟机日志如何查看_jvm性能监控_02

四、jinfo

查看或者增删改jvm运行时参数信息

命令格式:

jinfo [ option ] pid

常用参数:
  • -flag [+|-] name:增加或者删除jvm参数。(一般不用)
  • -flag name=value: 修改jvm参数(一般不用)
  • -flags:查看jvm参数
  • -sysprops:打印系统参数

java 虚拟线程 日志 java虚拟机日志如何查看_java 虚拟线程 日志_03

五、jmap

用于生成虚拟机的内存快照信息,或者查看java堆和持久代的详细信息

命令格式:

jmap [ option ] pid

常用参数:
  • -dump:[live,]format=b,file= 导出存储快照到系统目录,其中live表明只dump出存活的对象,format=b表明二进制输出,filename为导出的文件名。dump出的文件可以用jvsualvm工具分析
  • -heap:打印堆内存信息,和垃圾回收算法

java 虚拟线程 日志 java虚拟机日志如何查看_应用程序_04


参考资料:《深入理解JAVA虚拟机》