JVM | 命令行诊断与调优 jhsdb jmap jstat jps

目录

jmap

查看堆使用情况

查看类列表,包含实例数、占用内存大小

生成jvm的堆转储快照dump文件

jstat

查看gc的信息,查看gc的次数,及时间

查看VM内存中三代(young/old/perm)对象的使用和占用大小

查看元数据空间统计

查看年轻代对象的信息

查看年轻代对象的信息及其占用量

查看老年代对象的信息

查看老年代对象的信息及其占用量

查看最近一次GC统计和原因

jps

查看当前运行中java的进程

查看进程启动时传递给main()的参数

查看进程启动时的JVM参数

部分报错情况

[Cannot connect to core dump or remote debug server. Use jhsdb jmap instead](#Cannot connect to core dump or remote debug server. Use jhsdb jmap instead)

[ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...](#ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...)


jmap

查看堆使用情况

bash 复制代码
jmap -heap [pid]

查看类列表,包含实例数、占用内存大小

bash 复制代码
jmap -histo [pid]

如果带上live则只统计活对象:

bash 复制代码
jmap -histo:live [pid]

生成jvm的堆转储快照dump文件

bash 复制代码
jmap -dump:format=b,file=dumpFileName [pid]

jstat

查看JVM统计信息,类装载、内存、垃圾收集、JIT编译等运行数据。

bash 复制代码
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

查看gc的信息,查看gc的次数,及时间

bash 复制代码
jstat -gc [pid]

信息说明:

  • S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U: 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U: 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • EC: 年轻代中Eden的容量 (字节)
  • EU: 年轻代中Eden目前已使用空间 (字节)
  • OC: 老年代的容量 (字节)
  • OU: 老年代目前已使用空间 (字节)
  • MC: metaspace(元空间)的容量 (字节)
  • MU: metaspace(元空间)目前已使用空间 (字节)
  • CCSC:当前压缩类空间的容量 (字节)
  • CCSU:当前压缩类空间目前已使用空间 (字节)
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC: 从应用程序启动到采样时老年代(全gc)gc次数
  • FGCT:从应用程序启动到采样时老年代(全gc)gc所用时间(s)
  • GCT: 从应用程序启动到采样时gc用的总时间(s)

查看VM内存中三代(young/old/perm)对象的使用和占用大小

bash 复制代码
jstat -gccapacity [pid]

信息说明:

  • NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX: 年轻代(young)的最大容量 (字节)
  • NGC: 年轻代(young)中当前的容量 (字节)
  • S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
  • EC: 年轻代中Eden的容量 (字节)
  • OGCMN:老年代中初始化(最小)的容量大小 (字节)
  • OGCMX:老年代的最大容量(字节)
  • OGC: 老年代当前新生成的容量 (字节)
  • OC: 老年代的容量 (字节)
  • MCMN: metaspace(元空间)中初始化(最小)的大小 (字节)
  • MCMX: metaspace(元空间)的最大容量 (字节)
  • MC: metaspace(元空间)当前新生成的容量 (字节)
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC: 当前压缩类空间大小
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • FGC: 从应用程序启动到采样时老年代(全gc)gc次数

查看元数据空间统计

bash 复制代码
jstat -gcmetacapacity [pid]

信息说明:

  • MCMN: 最小元数据容量
  • MCMX: 最大元数据容量
  • MC: 当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC: 当前压缩类空间大小
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • FGC: 从应用程序启动到采样时老年代(全gc)gc次数
  • FGCT: 从应用程序启动到采样时老年代(全gc)gc所用时间(s)
  • GCT: 从应用程序启动到采样时gc用的总时间(s)

查看年轻代对象的信息

bash 复制代码
jstat -gcnew [pid]

信息说明:

  • S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U: 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U: 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • TT: 持有次数限制
  • MTT: 最大持有次数限制
  • DSS: 期望的幸存区大小
  • EC: 年轻代中Eden的容量 (字节)
  • EU: 年轻代中Eden目前已使用空间 (字节)
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

查看年轻代对象的信息及其占用量

bash 复制代码
jstat -gcnewcapacity [pid]

信息说明:

  • NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX: 年轻代(young)的最大容量 (字节)
  • NGC: 年轻代(young)中当前的容量 (字节)
  • S0CMX: 年轻代中第一个survivor(幸存区)的最大容量 (字节)
  • S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1CMX: 年轻代中第二个survivor(幸存区)的最大容量 (字节)
  • S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
  • ECMX: 年轻代中Eden的最大容量 (字节)
  • EC: 年轻代中Eden的容量 (字节)
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • FGC: 从应用程序启动到采样时old代(全gc)gc次数

查看老年代对象的信息

bash 复制代码
jstat -gcold [pid]

信息说明:

  • MC: metaspace(元空间)的容量 (字节)
  • MU: metaspace(元空间)目前已使用空间 (字节)
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • OC: Old代的容量 (字节)
  • OU: Old代目前已使用空间 (字节)
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • FGC: 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT: 从应用程序启动到采样时gc用的总时间(s)

查看老年代对象的信息及其占用量

bash 复制代码
jstat -gcoldcapacity [pid]

信息说明:

  • OGCMN:Old代中初始化(最小)的大小 (字节)
  • OGCMX:Old代的最大容量(字节)
  • OGC: Old代当前新生成的容量 (字节)
  • OC: Old代的容量 (字节)
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • FGC: 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT: 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT: 从应用程序启动到采样时gc用的总时间(s)

查看最近一次GC统计和原因

bash 复制代码
jstat -gccause [pid]

信息说明:

  • LGCC:最后一次GC原因
  • GCC: 当前GC原因(No GC 为当前没有执行GC)

jps

查看当前运行中java的进程

bash 复制代码
jps

查看进程启动时传递给main()的参数

bash 复制代码
jps -m

查看进程启动时的JVM参数

bash 复制代码
jps -v

部分报错情况

Cannot connect to core dump or remote debug server. Use jhsdb jmap instead

jdk版本原因所导致的,在jdk8以后需要加上 jhsdb 以运行(注意这里的格式):

bash 复制代码
jhsdb jmap --heap --pid [pid]

ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...

新版的Linux系统(Ubuntu 11.04之后会出现这种问题)加入了 ptrace-scope 机制。这种机制为了防止用户访问当前正在运行的进程的内存和状态,而一些调试软件本身就是利用 ptrace 来进行获取某进程的内存状态的(包括GDB),所以在新版本的Linux系统,默认情况下不允许再访问了, 可以临时开启(注意权限):

bash 复制代码
echo 0 > /proc/sys/kernel/yama/ptrace_scope

永久修改:

bash 复制代码
vi  /etc/sysctl.d/10-ptrace.conf 
 
kernel.yama.ptrace_scope = 0 

相关推荐
一休哥助手5 分钟前
全面解析 Linux 系统监控与性能优化
linux·运维·性能优化
二进制杯莫停7 分钟前
掌控网络流量的利器:tcconfig
linux
LI JS@你猜啊17 分钟前
Elasticsearch 集群
大数据·服务器·elasticsearch
watl023 分钟前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
撸码到无法自拔39 分钟前
深入理解.NET内存回收机制
jvm·.net
团儿.39 分钟前
Docker服务发现新纪元:探索Consul的无限魅力
运维·docker·云计算·服务发现·consul
赵大仁1 小时前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础
vvw&1 小时前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
李白你好1 小时前
家用无线路由器的 2.4GHz 和 5GHz
运维·网络
苹果醋31 小时前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计