jstat -gcutil 123456 2000 1000
123456 是pid
2000 是以毫秒表示的采样周期
1000 是采样的数量
100% 说明应该是 jvm 堆内存不够 或者内存泄漏
jmap -dump:file=heap.dump 123456
显示了与gc相关的堆信息输出
jstat -gc 123456
显示了最近一次gc的原因以及当前gc的原因
jstat -gccause 123456
java堆可以细分为: 新生代 和老年代 再细致一点有Eden空间 From Survivor空间,To Survivor空间等
-Xmx: 最大推是指新生代和老年代的大小之和的最大值,它是应用程序的堆上限。
-Xms: 可以用于设置系统的最小堆空间。也就是JVM启动时,所占据的操作系统内存大小。
-Xmn: 用于设置新生代的大小
tomcat catlina.sh
JAVA_OPTS="-Xms2048m -Xms2048m -Xmn800m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:MaxTenuringThreshold=10 -XX:+PrintGCDateStamps -verbose:gc -XX:+PrintGCDetails -Xloggc:/home/demo/tools/apache-tomcat-8.5.51/logs/gc.log"
ps -ef|grep tomca
root 6874 1 66 21:20 pts/0 00:00:05 /h
jmap -heap 6874
Attaching to process ID 6874, 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 = 2147483648 (2048.0MB)
NewSize = 838860800 (800.0MB)
MaxNewSize = 838860800 (800.0MB)
OldSize = 1308622848 (1248.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 268435456 (256.0MB)
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize = 536870912 (512.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 629145600 (600.0MB)
used = 276853800 (264.02835845947266MB)
free = 352291800 (335.97164154052734MB)
44.00472640991211% used
From Space:
capacity = 104857600 (100.0MB)
used = 0 (0.0MB)
free = 104857600 (100.0MB)
0.0% used
To Space:
capacity = 104857600 (100.0MB)
used = 0 (0.0MB)
free = 104857600 (100.0MB)
0.0% used
PS Old Generation
capacity = 1308622848 (1248.0MB)
used = 0 (0.0MB)
free = 1308622848 (1248.0MB)
0.0% used
16530 interned Strings occupying 1542832 bytes.
MaxTenuringThreshold: 设置对象进入老年代的年龄的最大值。
常用命令:
jps jstat jinfo jmap jhat jstak
垃圾搜集算法
1 引用计数算法
2 可达性分析算法
3 标记-清除算法
4 复制算法
5 标记-整理算法
6 分代收集算法
垃圾回收器的分类
按线程数分类(串行/ 并行 )
单线程执行所有的垃圾回收工作,适用于单核CPU服务器
工作进程----|(单线程)垃圾回收线程进行垃圾收集|---工作进行继续
工作进程----|(多线程)垃圾回收线程进行垃圾收集|---工作进行继续
适用于多处理器或多线程硬件上运行的数据量较大的应用
按工作模式分类
并发垃圾回收器 独占垃圾回收器
按碎片处理分类
压缩垃圾回收器 非压缩垃圾处理器
按分代分类
新生代垃圾处理器 老年代垃圾处理器
参考:
https://blog.youkuaiyun.com/flysqrlboy/article/details/79314521
https://blog.youkuaiyun.com/lkforce/article/details/60878295
https://blog.youkuaiyun.com/he_jian1/article/details/40787269
jvm 内存结构
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html