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= [pid] #将当前Java进程的内存占用情况导出来
jmap -histo:live [pid] > # 显示 存活 得对象信息
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= [pid] #将当前Java进程的内存占用情况导出来
jmap -dump:live,format=b,file=/home/lms/ 25488
4、jmap -histo:live [pid] > #将当前Java进程的内存占用情况导出来
jmap -histo:live 25488 >/home/lms/
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区对象
占用变化。