jps(全称:Java Virtual Machine Process Status Tool)是 java 提供的一个用来显示当前所有 java 进程的 pid 的命令。
- jps:查看java 进程id
- jps -v:查看虚拟机启动时的参数列表
JVM 统计监测工具
- 垃圾回收统计:
jstat -gc pid
可以评估程序内存使用及GC压力整体情况,常用
jstat -gc pid
1000 10:每间隔1000毫秒执行一次,一共执行10次jstat -gc pid
- S0C:第一个Survivor的大小,单位KB
- S1C:第二个Survivor的大小
- S0U:第一个Survivor的使用大小
- S1U:第二个Survivor的使用大小
- EC:Eden区的大小
- EU:Eden区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小(元空间)
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间,单位s
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间,单位s
- GCT:垃圾回收消耗总时间,单位s
- 堆内存统计:
jstat -gccapacity
11711 堆内存统计
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:当前新生代容量
- S0C:第一个Survivor大小
- S1C:第二个Survivor的大小
- EC:Eden区的大小
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:当前老年代大小
- OC:当前老年代大小
- MCMN:最小元数据容量
- MCMX:最大元数据容量
- MC:当前元数据空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代gc次数
- FGC:老年代GC次数
- 新生代垃圾回收统计:
jstat -gcnew
11711- S0C:第一个Survivor的大小
- S1C:第二个Survivor的大小
- S0U:第一个Survivor的使用大小
- S1U:第二个Survivor的使用大小
- TT:对象在新生代存活的次数
- MTT:对象在新生代存活的最大次数
- DSS:期望的幸存区大小
- EC:Eden区的大小
- EU:Eden区的使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- 新生代内存统计:
jstat -gcnewcapacity
11711
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:当前新生代容量
- S0CMX:最大Survivor1区大小
- S0C:当前Survivor1区大小
- S1CMX:最大Survivor2区大小
- S1C:当前Survivor2区大小
- ECMX:最大Eden区大小
- EC:当前Eden区大小
- YGC:年轻代垃圾回收次数
- FGC:老年代回收次数
- 老年代垃圾回收统计:
jstat -gcold
11711
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- OC:老年代大小
- OU:老年代使用大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
- 老年代内存统计:
jstat -gcoldcapacity
11711
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:当前老年代大小
- OC:老年代大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
- 元数据空间统计:
jstat -gcmetacapacity
11711
- MCMN:最小元数据容量
- MCMX:最大元数据容量
- MC:当前元数据空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
- 展示gc概要信息:
jstat -gcutil
11711
- S0:Survivor1区当前使用比例
- S1:Survivor2区当前使用比例
- E:Eden区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
- 展示类加载信息
jstat -class
11711
- Loaded:加载的class数量
- Bytes:加载的class类大小, 单位KB
- Unloaded:未加载的class数量
- Bytes:未加载的class类大小, 单位KB
查看正在运行的Java应用程序的扩展参数
- 查看jvm的参数:
jinfo -flags
11711
- 查看java系统参数:jinfo -sysprops
11711
生成堆转储快照,可以用于查看堆内存信息,实例个数以及占用内存大小
- 查看历史生成的实例:
jmap -histo
11711 - 查看当前存活的实例,执行过程中可能会触发一次full gc:
jmap -histo:live
11711,建议执行时可以输出到文本中,jmap -histo 11711 > jmapHisto.txt
- num:序号
- instances:实例数量
- bytes:占用空间大小
- class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]
- 堆信息:
jamp -heap
11711
Heap Configuration:
MinHeapFreeRatio = ##在堆的使用率小于40%的时候进行收缩,当Xmx=Xms的时候此配置无效
MaxHeapFreeRatio = ##在堆使用率大于70%的时候进行扩展,当Xmx=Xms的时候此配置无效
MaxHeapSize = ##堆的最大空间
NewSize = ##新生代的大小
MaxNewSize = ##最大的新生代的大小
OldSize = ##老年代的大小
NewRatio = ##新生代中Eden和和Survivor区的比例为 8:1:1
SurvivorRatio =
MetaspaceSize = ##元空间的大小
G1HeapRegionSize = 0 (0.0MB) ##使用G1垃圾收集的区间
- 堆内存dump到当前目录jmap.hprof文件下:jmap -dump:format=b,file=jmap.hprof 11711
- 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路径)
- 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
虚拟机生成当前线程的快照,用户分析线程出现长时间卡顿的原因,如线程之间死锁,死循环,请求外部资源导致线程长时间等待等问题
- “Thread-1” 线程名
- prio=5 优先级=5
- tid=0x000000001fa9e000 线程id
- nid=0x2d64 线程对应的本地线程标识nid
- java.lang.Thread.State: 线程状态
使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如11711
按H,获取每个线程的内存情况
如果java启动后发现cpu居高不下或者异常,找到内存和cpu占用最高的线程tid,比如19664
转为十六进制得到 0x4cd0,此为线程id的十六进制表示
执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法
查看对应的堆栈信息找出可能存在问题的代码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)