堆内存
-
jmap -heap pid
图中重点信息讲述:默认的垃圾回收算法为Parallel GC ,共用了2个线程进行垃圾回收检查。堆相关信息的配置和使用率。
要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起
-
jmap -histo pid > jmaptemp.log
使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图。如果带上live则只统计活对象,jvm进行Full GC 后,进行统计。
class name是对象类型,说明如下:
B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象
- jmap -dump:format=b,file=文件名 [pid]
导出Dump文件,可以用相关工具(jhat/jvisualvm/mat)进行分析。-dump:live会触发Full GC后转存Dump。
需要注意的是,上面的导出快照命令,在1G左右JVM内存的情况下,要大概等待1分钟左右的时间,且执行时会使JVM暂停执行,因此不要在正式运行系统的高峰期或关键时刻使用。
垃圾回收
-
jstat -gcutil pid
- S0 — Heap上的 Survivor space 0 区已使用空间的百分比
- S1 — Heap上的 Survivor space 1 区已使用空间的百分比
- E — Heap上的 Eden space 区已使用空间的百分比
- O — Heap上的 Old space 区已使用空间的百分比
- P — Perm space 区已使用空间的百分比
- YGC — 从应用程序启动到采样时发生 Young GC 的次数
- YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
- FGC — 从应用程序启动到采样时发生 Full GC 的次数
- FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
- GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
进程监控
-
jstack pid > jstacktemp.log
- 线程名称:http-bio-8091-exec-71
- 线程类型:daemon
- 优先级: 6,默认是5
- jvm线程id:tid=0x0000000012561000,jvm内部线程的唯一标识(通过java.lang.Thread.getId()获取,通常用自增方式实现。)
- 对应系统线程id(NativeThread ID):nid=0x343d0,和top命令查看的线程pid对应,不过一个是10进制,一个是16进制。(通过命令:top -H -p pid,可以查看该进程的所有线程信息)
- 线程状态:waiting on condition
- 起始栈地址:[0x000000001cd2f000]
- Java thread statck trace:是上面at行的信息。到目前为止这是最重要的数据,Java stack trace提供了大部分信息来精确定位问题根源。