jvm参数

-Xms等价于-XX:InitialHeapSize
-Xmx等价于-XX:MaxHeapSize
-XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M

查看JVM运行时参数:
jps: 查看java进程
jps -l: 查看完全类名

jinfo -flag MaxHeapSize pid(java进程pid) : java进程设置的最大内存
jinfo -flags pid : 查看手动赋值过的参数

jstat:

jstat -class 9259r
Loaded Bytes Unloaded Bytes Time
17141 31432.3 32 48.6 24.84
loaded 加载的类的个数
unloaded 卸载的

垃圾收集

gc 、-gcutil、-gccause、-gcnew、-gcold

jstat -gc pid 1000 3 :

jstat -gc pid 1000 3
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
7552.0 7552.0 0.0 3140.8 60416.0 5824.5 150948.0 108001.5 89600.0 86713.5 11776.0 11173.3 519 3.519 7 1.107 4.626

S0C、S1C、S0U、S1U、:S0和S1的总量与使用量。
EC、EU:Eden区总量与使用量。
OC、OU:Old区总量与使用量。
MC、MU:MetaSpace区总量与使用量。
CCSC、CCSU:压缩类空间总量与使用量。
YGC、YGCT: YoungGC的次数与时间。
FGC、FGCT: FullGC的次数与时间。
GCT:总的GC时间

JIT编译

jstat -compiler pid

导出内存映像文件

内存溢出自动导出:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
使用jmap命令手动导出:
jmap -dump:format=b,file=heap.hprof pid

jstack死循环与死锁

线程的几种状态:
NEW: 线程还未启动
RUNNABLE :线程已经运行。
BLOCKED:等待锁
WAITING: 等待另一个线程做一些操作。
TIMED_WAITING:
TERMINATED: 线程已经退出

死循环导致CPU飙高

mvn clean package -Dmaven.test.skip
jstak pid > text.txt
top
top -p pid -H
printf “%x” pid 转换为16进制 根据此16进制的值,去堆栈文件中去查询此值
image.png