#常见问题
堆溢出
内存泄漏
-XX:+HeapDumpOnOutOfMemoryError:堆溢出的时候将当时的堆存储情况存下来,GC Root引用链可查出泄露位置 GC Root包括以下几种对象:
- 虚拟机栈中引用的对象
- 本地方法栈中JNI引用的对象
- 方法区中类静态成员变量引用的对象
- 方法区中常量引用的静态成员变量引用的对象
- 方法区中常量引用的对象
常见内存泄漏
内存设置不够
-Xms 初始堆大小 -Xmx 最大堆大小
| 类型 | 参数 | 描述 |
|---|---|---|
| 堆内存大小 | -Xms |
启动JVM时堆内存的大小 |
-Xmx |
堆内存最大限制 | |
| 新生代空间大小 | -XX:NewRatio |
新生代和老年代的内存比(默认1:2) |
-XX:NewSize |
新生代内存大小 | |
-XX:SurvivorRatio |
Eden区和Survivor区的内存比(默认8 表示新生代eden:from:to=8:1:1) |
sun公司给的例子是(4G内存,32个线程并发能力)-Xmx3800m -Xms3800m -Xmn2G -Xss128k
分析工具
jps (JVM Process Status Tool)
显示系统内所有HotSpot虚拟机进程
jps -l //显示所有pid和完整启动类
jps -v //显示虚拟机启动参数
jstat (JVM Statistics Momitoring Tool)
收集HotSpot虚拟机进程各方面的运行参数
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

S0C、S1C、S0U、S1U:S0和S1的总量与使用量(S0 和S1 只会启用一个,未启用的会是0)
EC、EU eden区总量与使用量
OC、OU:Old区总量与使用量
MC、MU:Metaspace区总量与使用量
CCSC、CCSU:压缩类空间总量与使用量
YGC、YGCT:YoungGC的次数与时间
FGC、FGCT:FullGC的次数与时间
GCT:总的GC时间
hlkj@hlkj01:~$ jstat -gc 5903
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
23040.0 24064.0 128.0 0.0 99328.0 24789.0 236544.0 59534.4 81280.0 75349.8 10624.0 9574.2 48 0.990 5 1.160 2.150
hlkj@hlkj01:~$ jstat -gcutil 5903
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.56 0.00 39.00 25.17 92.70 90.12 48 0.990 5 1.160 2.150
jinfo (Configuration Info for Java)
显示虚拟机配置信息
jinfo pid
jmap (Memory Map for Java)
显示虚拟机内存信息,生成内存转储快照

格式jmap -heap pid
hlkj@hlkj01:~$ jmap -heap 5903
Attaching to process ID 5903, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 536870912 (512.0MB)
NewSize = 44564480 (42.5MB)
MaxNewSize = 178782208 (170.5MB)
OldSize = 89653248 (85.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 111673344 (106.5MB)
used = 32897408 (31.3734130859375MB)
free = 78775936 (75.1265869140625MB)
29.458603836561032% used
From Space:
capacity = 4718592 (4.5MB)
used = 229376 (0.21875MB)
free = 4489216 (4.28125MB)
4.861111111111111% used
To Space:
capacity = 5242880 (5.0MB)
used = 0 (0.0MB)
free = 5242880 (5.0MB)
0.0% used
PS Old Generation
capacity = 242221056 (231.0MB)
used = 66423896 (63.346763610839844MB)
free = 175797160 (167.65323638916016MB)
27.422841389973957% used
33416 interned Strings occupying 3958832 bytes.
生成快照
jmap -dump:live,format=b,file=heap.bin pid
jhat (JVM Heap Dump Browser)
分析jmap生成的快照,建立一个html服务7000端口
jhat heap.bin
jstack (Stack Trace for Java)
显示虚拟机线程快照
格式jstack [option] pid
