一.JVM参数调优 (目的:事前预防,事前准备)
(1)事前预防的内容:
-Xms4096m 最小堆大小
-Xmx4096m 最大堆大小 不要超过物理内存的3/5,因为发生oom时要快照存储,超过3/5后则有可能快照存储不了。
程序启动时操作系统并不会立即分配4G的大小,而是随着程序的运行慢慢分配到4G的空间。
-XX:+AlwaysPreTouch 一启动就要分配最小堆大小的空间。
把最小和最大堆大小设置为一样,主要是为了避免反复向操作系统申请内存。
只有内存达到最大值才会触发fullGC。
-Xmn2g 指定新生代的大小为2G
-XX:PermSize -XX:MaxPermSize 永久区参数设置
-Xss768k 线程栈大小,默认值为1M,这个地方调小,可以创建更多的线程。
-XX:+UseG1GC 使用G1垃圾收集算法
(2)事前准备的内容:
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-XX:+PrintGCDateStamps
-Xloggc:/opt/wildfly/standalone/log/verbose.gc
开始gc日志,文件记录
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/wildfly/standalone/log/
二.GC
fullGC stop the world
关注的两个方面:
(1)过多/频繁的fullGC 卡顿
(2)oom 异常排查
1.什么情况下会发生GC 当申请内存不够的时候
2.GC日志的查看 -verbose:gc -XX:+PrintGCDetails -Xloggc:gclog.log -XX:PrintGCDateStamps
3.FullGC的危害:出现卡顿
4.如何来看 跟日志,jstat
5.查看堆的使用情况 jmap
6.fullgc 线上问题
创建对象分配不到足够的空间
手动的System.gc(); 可以强制禁用手动gc -XX:+DisableExplicitGC
OOM 异常排查
1.发生OOM前要做好事前准备,设置jvm参数,得到快照
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/wildfly/standalone/log/
2.用eclipse工具mat 查看快照文件 MemoryAnalyzer
三.监控工具
visualVM,zabbix