JVM命令行监控工具

浅浅的花香味﹌ 2022-11-06 03:59 470阅读 0赞

1 jps

功能描述:jps 全称 JVM Process Status Tool,命令位于 jdk 的 bin 目录下,其作用是显示当前系统的 Java 进程情况,及其 pid 号。他是 Java自带的一个命令。

code:

  1. public class Simple {
  2. public static void main(String[] args) {
  3. while (true){
  4. }
  5. }
  6. }

在这里插入图片描述
-q:仅仅显示 LVMID (local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等。
在这里插入图片描述
-l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
在这里插入图片描述
-m:输出虚拟机进程启动时传递给主类main()的参教
在这里插入图片描述
-v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数。

设置启动参数:-Xms100m -Xms100m
在这里插入图片描述
以上参数可以综合使用:
在这里插入图片描述

2 jstat

jstat(Java Virtual Machine statistics monitoring tool)它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

它的基本使用语法为:

  1. #jstat
  2. #-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
  3. #-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信息
  4. #vmid: java进程ID
  5. #-interval: 用于指定输出统计数据的周期,单位为毫秒,即:查识间隔
  6. #-count:用于指定查询的总次数
  7. jstat -<option> [-t] [-h<lines>] <vmid> [<interval>[<count>]]

选项 option可以由以下值构成:

类装载相关的:

-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等

垃圾回收相关的:

-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。

-capacity:显示内容与-gc基本相同,但输出主要关注]ava堆各个区域使用到的最大、最小空间。

-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。

-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因 。

-gcnew:显示新生代GC状况。

-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间。

-gold:显示老年代GC状况

2.1 code

  1. public class Simple {
  2. /** * VM options: -Xms100m -Xms100m */
  3. public static void main(String[] args) {
  4. Scanner scanner = new Scanner(System.in);
  5. String info = scanner.next();
  6. }
  7. }

2.2 类装载

显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等
在这里插入图片描述
1秒打印一次,打印5次:

  1. #-interval: 用于指定输出统计数据的周期,单位为毫秒,即:查识间隔
  2. #-count:用于指定查询的总次数
  3. #-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
  4. #-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信
  5. jstat -class -t -h2 6928 1000 10

在这里插入图片描述

2.2 垃圾回收

  1. #-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。
  2. jstat -gc 6928

s0总容量、S1总容量、S0使用容量、S1使用容量、Eden总容量、Eden使用容量、Old总容量、Old使用容量、方法区总容量、方法区使用容量、压缩类总容量、压缩类使用容量、YongGC次数、YongGC花费时间、FullGC次数、FullGC花费时间、GC总花费时间
在这里插入图片描述
code

  1. public class GCTest {
  2. /** * VM options:-Xms60m -Xmx60m */
  3. public static void main(String[] args) {
  4. List<Object> list = new ArrayList<>();
  5. for (int i = 1; i <= 1000; i++) {
  6. //100KB
  7. byte[] arr = new byte[1024 * 100];
  8. list.add(arr);
  9. try {
  10. Thread.sleep(100);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  16. }

在这里插入图片描述

  1. #-gcutil查看OOM
  2. jstat -gcutil 12464 1000 30

在这里插入图片描述

在这里插入图片描述

3 jmap

jmap (JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件、二进制文件)它还可以获取目标Java进程的内存相关信息,包括]ava堆各区域的使用情况、堆中对象的统计信息.、类加载信息等。

它的基本使用语法为:

  1. jmap [option] <pid>
  2. jmap [option] <executable <core>>
  3. jmap [option] [server_id@]<remote server IP or hostname>

其中option包括:
在这里插入图片描述

导出内存映射文件:

一般来说,使用jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中。

说明
(1)通常在写 Heap Dump 文件前会触发一次Full GC,所以 heap dump文件里保存的都是FullGC后留下的对象信息。
(2)由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大内存镜像生成dump文件则需要耗费更长的时间来完成。

3.1 手动的方式

  1. jmap -dump:format=b,file=<filename,hprof> <pid>
  2. #live 只保存堆中存活的对象
  3. jmap -dump:live,format=b,file=<filename,hprof> <pid>

code

  1. /** * VM options:-Xms60m -Xmx60m */
  2. public static void main(String[] args) {
  3. List<Object> list = new ArrayList<>();
  4. for (int i = 1; i <= 1000; i++) {
  5. //100KB
  6. byte[] arr = new byte[1024 * 100];
  7. list.add(arr);
  8. try {
  9. Thread.sleep(200);
  10. } catch (InterruptedException e) {
  11. e.printStackTrace();
  12. }
  13. }
  14. }
  15. #命令
  16. jmap -dump:format=b,file=d:\temp.hprof 17788
  17. jmap -dump:live,format=b,file=d:\temp_live.hprof 17788

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

3.2 自动方式

当程序发生OOM退出系统时,一些瞬时信息都随着程序的终止而消失,而重现OOM问题往往比较困难或者耗时。此时若能在OOM时,自动导出dump文件就显得非常迫切。

获取快照文件的方法:

  1. -XX:+HeapDumpOnOutOfMemoryError:在程序发生OOM时,导出应用程序的当前堆快照。
  2. -XX:HeapDumpPath:可以指定堆快照的保存位置。

例如:

  1. -Xms60m -Xmx60m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\temp_oom.hprof

修改VM参数:

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

发表评论

表情:
评论列表 (有 0 条评论,470人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JVM 监控及诊断命令工具概述

    一 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。 Java 作为最流行的编程语言之一,