Java内存分析工具——jmap

Java内存分析工具——jmap

jmap

1、jmap [option]

**jmap [option] **

  • ==pid==: 可通过 jps 或者 ps 获得

示例如上面 示例图 一样,用ps 查询到java 的进程号 25488 ,然后 jmap 25488 查看到当前进程的相关信息

2、jmap [option] < executable

jmap [option] < executable

executable: 生成核心转储的Java可执行文件。
core: 要打印配置信息的核心文件

3、jmap [option] [server_id@]

server-id: 当很多debug服务在远程跑的时候,这个服务的唯一 ID
remote-hostname-or-IP: 远程服务的IP或者hostname

4、[option]

  • dump: :生成Java堆快储快照,如下
         live:仅将存活得对象dump出
         format:编码格式
         file :生成得文件名称
  • finalizerinfo :显示出等待执行 finalize方法得对象
  • heap : 显示Java堆详细信息
  • histo[:live] :显示堆中对象的详细信息,如果加了live,只显示 存活 得对象信息
  • clstats :显示出加载器静态对象
常用命令:
jmap [pid] # 查看具体情况

jmap -dump:live,format=b,file=xxx.xxx [pid] #将当前Java进程的内存占用情况导出来
 
jmap -histo:live [pid] >a.log  # 显示 存活 得对象信息

jmap -finalizerinfo [pid] # 查看 等待执行finalize 方法的数量

jmap -heap [pid] # 堆摘要信息
1、jmap -heap [pid] : 显示堆的详细信息
  • 堆的配置(Heap Configuration)
  • 堆使用(Heap Usage)(新生代、老年代)
2、jmap -finalizerinfo [pid] : 查看 等待执行finalize 方法的数量
3、jmap -dump:live,format=b,file=xxx.xxx [pid] #将当前Java进程的内存占用情况导出来
jmap -dump:live,format=b,file=/home/lms/a.txt 25488
4、jmap -histo:live [pid] >a.log #将当前Java进程的内存占用情况导出来
jmap -histo:live 25488 >/home/lms/a.log

Java分析工具——jinfo

jinfo

1、jinfo [option]

**jinfo [option] **

pid: 可通过 jps 或者 ps 获得
示例如上面 示例图 一样,用ps 查询到java 的进程号 25488 ,然后 jinfo 25488 查看到当前进程的相关信息

2、jinfo [option] < executable

jinfo [option] < executable

executable: 生成核心转储的Java可执行文件。
core: 要打印配置信息的核心文件

3、jinfo [option] [server_id@]

server-id: 当很多debug服务在远程跑的时候,这个服务的唯一 ID
remote-hostname-or-IP: 远程服务的IP或者hostname

4、[option]

  • flags : 打印所有的JVM参数
  • flag :打印出指定 name 的JVM参数
  • flag [+|-] : 让指定 name 的 JVM参数生效/失效
  • flag = :修改 JVM参数,将 name 的值设置为 value
  • sysprops :打印出所有的系统参数
jinfo -flags 25488 # 打印所有参数
jinfo -flag MaxHeapSize 25488 # 打印出MaxHeapSize
jinfo -sysprops 25488 # 打印所有系统变量
jinfo -flag -PrintGCDateStamps 25488 # 失效
jinfo -flag +PrintGCDateStamps 25488 # 生效
jinfo -flag MaxHeapFreeRatio=80 25488 # 设置值

jstat

jstat -gc PID

运行这个命令之后会看到如下列,给大家解释一下:
S0C:这是From Survivor区的大小
S1C:这是To Survivor区的大小
S0U:这是From Survivor区当前使用的内存大小
S1U:这是To Survivor区当前使用的内存大小
EC:这是Eden区的大小
EU:这是Eden区当前使用的内存大小
OC:这是老年代的大小
OU:这是老年代当前使用的内存大小
MC:这是方法区(永久代、元数据区)的大小
MU:这是方法区(永久代、元数据区)的当前使用的内存大小
YGC:这是系统运行迄今为止的Young GC次数
YGCT:这是Young GC的耗时
FGC:这是系统运行迄今为止的Full GC次数
FGCT:这是Full GC的耗时
GCT:这是所有GC的总耗时

其他的jstat命令

除了上面的jstat -gc命令是最常用的以外,他还有一些命令可以看到更多详细的信息,如下所示:
jstat -gccapacity PID:堆内存分析
jstat -gcnew PID:年轻代GC分析,这里的TT和MTT可以看到对象在年轻代存活的年龄和存活的最大年龄
jstat -gcnewcapacity PID:年轻代内存分析
jstat -gcold PID:老年代GC分析
jstat -gcoldcapacity PID:老年代内存分析
jstat -gcmetacapacity PID:元数据区内存分析

jstat -gc PID 1000 10
这行命令,他的意思就是每隔1秒钟更新出来最新的一行jstat统计信息,一共执行10次jstat统计
通过这个命令,你可以非常灵活的对线上机器通过固定频率输出统计信息,观察每隔一段时间的jvm中的Eden区对象
占用变化。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值