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 

相关推荐
吾爱星辰42 分钟前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
介亭44 分钟前
internal.KaptWithoutKotlincTask$KaptExecutionWorkAction 问题 ---Room数据库
jvm
小飞猪Jay2 小时前
C++面试速通宝典——13
jvm·c++·面试
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO3 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu73 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我3 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、3 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程3 小时前
Linux中环境变量
linux