专业的JAVA编程教程与资源

网站首页 > java教程 正文

JVM-生产系统内存分析工具及用法

temp10 2024-12-03 03:00:54 java教程 15 ℃ 0 评论

引言

在实际的生产系统中,经常会出现某个生产版本更新后,系统变得非常的卡顿或者是系统运行一段时间因内存空间不足后自动重启,出现这些问题之后呢,就需要通过内存分析工具来定位异常出现的原因以及问题代码的位置。如果系统突然变卡顿,可能是JVM参数需要调整,此时也可以通过内存分析工具查看GC频率和时长,调整jvm 堆内存配置,减少GC频率,也可以加快系统运行速度。本文主要介绍自己常用的内存分析工具以及对应的用法,为后续项目中GC调优做个记录。

Jmap

jmap命令可以用于查看JVM内存信息

JVM-生产系统内存分析工具及用法

  1. jmap -histo pid:查看类对应的示例个数以及所内内存大小,也可通过增加 > xxx.txt 将打印信息输出为文本文件
    1. instances:表示该类对应的示例数量
    2. byte:占用内存大小
    3. class name:类名,B代表byte[],C代表char[],I代表int[]
  2. jmap -dump:format=b,file=xxx.hprof pid:导出堆内空间dump文件
  3. jmap -heap pid:查询jvm堆空间内存配置
  4. -XX:+HeapDumpOnOutOfMemoryError :通过此参数设置当JVM内存溢出时,自动导出dump文件
  5. -XX:HeapDumpPath :自动导出的dump文件 对应导出目标路径

Jstack

jstack主要是用于查询java中存在的死锁

  1. jstack pid:查看JVM中存在的死锁以及分析导致死锁的代码位置

Jinfo

用于查看正在运行的java应用对应JVM参数,执行脚本为jinfo -flags pid

Jstat(重要)

jstat方法对GC调优的作用非常的大,可以直观地显示JVM堆空间各区域的内存使用量以及YoungGC和Full GC次数

  • jstat -gc pid:查看当前java应用堆空间GC情况
  • SxC:代表幸存区内存总大小
  • SxU:代表survivor区内存使用量
  • EC:eden区内存总大小
  • EU:eden区已使用内存大小
  • OC:old区内存总大小
  • OU:old区已使用内存大小
  • MC:方法区大小(元空间)
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间,单位s
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间,单位s
  • GCT:垃圾回收消耗总时间,单位s

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表