1、jps 查看java 进程

jps(全称:Java Virtual Machine Process Status Tool)是 java 提供的一个用来显示当前所有 java 进程的 pid 的命令。

  • jps:查看java 进程id
    在这里插入图片描述
  • jps -v:查看虚拟机启动时的参数列表

2、jstat JVM检测GC工具

JVM 统计监测工具
在这里插入图片描述

  • 垃圾回收统计:jstat -gc pid 可以评估程序内存使用及GC压力整体情况,常用
  • jstat -gc pid 1000 10:每间隔1000毫秒执行一次,一共执行10次jstat -gc pid
    在这里插入图片描述
    • S0C:第一个Survivor的大小,单位KB
    • S1C:第二个Survivor的大小
    • S0U:第一个Survivor的使用大小
    • S1U:第二个Survivor的使用大小
    • EC:Eden区的大小
    • EU:Eden区的使用大小
    • OC:老年代大小
    • OU:老年代使用大小
    • MC:方法区大小(元空间)
    • MU:方法区使用大小
    • CCSC:压缩类空间大小
    • CCSU:压缩类空间使用大小
    • YGC:年轻代垃圾回收次数
    • YGCT:年轻代垃圾回收消耗时间,单位s
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间,单位s
    • GCT:垃圾回收消耗总时间,单位s
  • 堆内存统计:jstat -gccapacity 11711 堆内存统计
    在这里插入图片描述
    • NGCMN:新生代最小容量
    • NGCMX:新生代最大容量
    • NGC:当前新生代容量
    • S0C:第一个Survivor大小
    • S1C:第二个Survivor的大小
    • EC:Eden区的大小
    • OGCMN:老年代最小容量
    • OGCMX:老年代最大容量
    • OGC:当前老年代大小
    • OC:当前老年代大小
    • MCMN:最小元数据容量
    • MCMX:最大元数据容量
    • MC:当前元数据空间大小
    • CCSMN:最小压缩类空间大小
    • CCSMX:最大压缩类空间大小
    • CCSC:当前压缩类空间大小
    • YGC:年轻代gc次数
    • FGC:老年代GC次数
  • 新生代垃圾回收统计:jstat -gcnew 11711 在这里插入图片描述
    • S0C:第一个Survivor的大小
    • S1C:第二个Survivor的大小
    • S0U:第一个Survivor的使用大小
    • S1U:第二个Survivor的使用大小
    • TT:对象在新生代存活的次数
    • MTT:对象在新生代存活的最大次数
    • DSS:期望的幸存区大小
    • EC:Eden区的大小
    • EU:Eden区的使用大小
    • YGC:年轻代垃圾回收次数
    • YGCT:年轻代垃圾回收消耗时间
  • 新生代内存统计:jstat -gcnewcapacity 11711
    在这里插入图片描述
    • NGCMN:新生代最小容量
    • NGCMX:新生代最大容量
    • NGC:当前新生代容量
    • S0CMX:最大Survivor1区大小
    • S0C:当前Survivor1区大小
    • S1CMX:最大Survivor2区大小
    • S1C:当前Survivor2区大小
    • ECMX:最大Eden区大小
    • EC:当前Eden区大小
    • YGC:年轻代垃圾回收次数
    • FGC:老年代回收次数
  • 老年代垃圾回收统计:jstat -gcold 11711
    在这里插入图片描述
    • MC:方法区大小
    • MU:方法区使用大小
    • CCSC:压缩类空间大小
    • CCSU:压缩类空间使用大小
    • OC:老年代大小
    • OU:老年代使用大小
    • YGC:年轻代垃圾回收次数
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间
  • 老年代内存统计:jstat -gcoldcapacity 11711
    在这里插入图片描述
    • OGCMN:老年代最小容量
    • OGCMX:老年代最大容量
    • OGC:当前老年代大小
    • OC:老年代大小
    • YGC:年轻代垃圾回收次数
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间
  • 元数据空间统计:jstat -gcmetacapacity 11711
    在这里插入图片描述
    • MCMN:最小元数据容量
    • MCMX:最大元数据容量
    • MC:当前元数据空间大小
    • CCSMN:最小压缩类空间大小
    • CCSMX:最大压缩类空间大小
    • CCSC:当前压缩类空间大小
    • YGC:年轻代垃圾回收次数
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间
  • 展示gc概要信息:jstat -gcutil 11711
    在这里插入图片描述
    • S0:Survivor1区当前使用比例
    • S1:Survivor2区当前使用比例
    • E:Eden区使用比例
    • O:老年代使用比例
    • M:元数据区使用比例
    • CCS:压缩使用比例
    • YGC:年轻代垃圾回收次数
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间
  • 展示类加载信息jstat -class 11711
    在这里插入图片描述
    • Loaded:加载的class数量
    • Bytes:加载的class类大小, 单位KB
    • Unloaded:未加载的class数量
    • Bytes:未加载的class类大小, 单位KB

3、jinfo 查看Java应用程序的扩展参数

查看正在运行的Java应用程序的扩展参数

  • 查看jvm的参数:jinfo -flags 11711
    在这里插入图片描述- 查看java系统参数:jinfo -sysprops 11711
    在这里插入图片描述

4、jmap 查看Java程序堆信息

在这里插入图片描述

生成堆转储快照,可以用于查看堆内存信息,实例个数以及占用内存大小

  • 查看历史生成的实例:jmap -histo 11711
  • 查看当前存活的实例,执行过程中可能会触发一次full gc:jmap -histo:live 11711,建议执行时可以输出到文本中,jmap -histo 11711 > jmapHisto.txt
    在这里插入图片描述
    • num:序号
    • instances:实例数量
    • bytes:占用空间大小
    • class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]
  • 堆信息:jamp -heap 11711
    在这里插入图片描述
Heap Configuration:
   MinHeapFreeRatio = ##在堆的使用率小于40%的时候进行收缩,当Xmx=Xms的时候此配置无效
   MaxHeapFreeRatio = ##在堆使用率大于70%的时候进行扩展,当Xmx=Xms的时候此配置无效
   MaxHeapSize      = ##堆的最大空间
   NewSize          = ##新生代的大小
   MaxNewSize       = ##最大的新生代的大小
   OldSize          = ##老年代的大小
   NewRatio         = ##新生代中Eden和和Survivor区的比例为 8:1:1
   SurvivorRatio    = 
   MetaspaceSize    = ##元空间的大小
   G1HeapRegionSize = 0 (0.0MB) ##使用G1垃圾收集的区间
  • 堆内存dump到当前目录jmap.hprof文件下:jmap -dump:format=b,file=jmap.hprof 11711
    在这里插入图片描述
    • 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=./ (路径)

5、jstack 查看线程快照

虚拟机生成当前线程的快照,用户分析线程出现长时间卡顿的原因,如线程之间死锁,死循环,请求外部资源导致线程长时间等待等问题
在这里插入图片描述

  • “Thread-1” 线程名
  • prio=5 优先级=5
  • tid=0x000000001fa9e000 线程id
  • nid=0x2d64 线程对应的本地线程标识nid
  • java.lang.Thread.State: 线程状态

6、jvisualvm jvm提供的图形化分析工具

jdk的bin安装目录下启动,可以远程(不建议)连接,也看加载dump文件

./jvisualvm

在这里插入图片描述

7、mat eclipse的dump分析工具

可以单独下载安装mat,下载地址,注意新版需要jdk11+,个人觉得比jvisualvm更好用
在这里插入图片描述

在这里插入图片描述

8、top 查看linux内存信息

使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如11711

按H,获取每个线程的内存情况
在这里插入图片描述
如果java启动后发现cpu居高不下或者异常,找到内存和cpu占用最高的线程tid,比如19664

转为十六进制得到 0x4cd0,此为线程id的十六进制表示

执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法

查看对应的堆栈信息找出可能存在问题的代码

9、vmstat 指定采样周期和次数的功能性监测工具

Linux命令行工具vmstat是一款指定采样周期和次数的功能性监测工具,可以使用它监控进程上下文切换的情况。

在这里插入图片描述
vmstat 1 3 命令行代表每秒收集一次性能指标,总共获取 3次。以下为上图中各个性能指标的注释:

  • procs
    • r:在运行队列中等待运行的进程数
    • b:在等待io的进程数
  • memory
    • swpd:已使用的交换内存(kb)
    • free:空闲的内存(kb)
    • buff:用来作为缓冲的内存(kb)
    • cache:用作高速缓存的内存大小(kb)
  • swap
    • si:从磁盘交换到内存的交换页数量(kb/秒)
    • so:从内存交换到磁盘的交换页数量(kb/秒)
  • io
    • bi:发送到块设备的块数
    • bo:从块设备接收到的块数
  • system
    • in:每秒中断数
    • cs:每秒上下文切换次数
  • cpu
    • us:用户进程 CPU 使用时间
    • sy:内核进程 CPU 使用时间
    • id:CPU空闲时间
    • wa:等待 I/O 所消耗CPU的时间
    • st:从虚拟机设备中获取的时间

10、pidstat 进程上下文切换

Linux命令行工具pidstat命令就可以帮助我们监测到具体进程的上下文切换。
在这里插入图片描述
常用参数:

  • -u:默认参数,显示各个进程的 cpu 使用情况;
  • -r:显示各个进程的内存使用情况;
  • -d:显示各个进程的 I/O 使用情况;
  • -w:显示每个进程的上下文切换情况;
  • -p:指定进程号;
  • -t:显示进程中线程的统计信息

pidstat -w -p pid 命令行,我们可以查看到进程的上下文切换
在这里插入图片描述

  • cswch/s:每秒主动任务上下文切换数量
  • nvcswch/s:每秒被动任务上下文切换数量

pidstat -w -p pid -t 命令行,我们可以查看到具体线程的上下文切换
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐