| 配置项 | 配置文件 |
|---|---|
| 默认使用G1 无需配置 | 从JDK 9开始,G1成为默认的垃圾回收器。无需处理 |
| 增加OOM堆Dump保存配置 | -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/日志目录 |
| 2c4容器堆大小设置为机器 75% | -Xms3072m -Xmx3072m |
java -server -Xms1g -Xmx1g -Xmn100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/dongguabai/Desktop/temp/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xloggc:/Users/dongguabai/Desktop/temp/gc_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags -XX:+PrintHeapAtGC -XX:+UseFastAccessorMethods -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -jar /Users/dongguabai/develope/maven/repository/com/example/demo111111/0.0.1-SNAPSHOT/demo111111-0.0.1-SNAPSHOT.jar
如果是 docker 可以挂载盘,然后 oom 输出到挂载盘
FROM java:8
MAINTAINER itboat008
#添加主机路径下的 app.jar到 镜像的 /home/docker/oom-test/路径
ADD ./app.jar /home/docker/oom-test/app.jar
ADD ./heapDump.sh /home/docker/oom-test/heapDump.sh
#设置 OnOutOfMemoryError 时候需要执行的脚本
ENV JAVA_OPTS="-Xms256M -Xmx256M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/applog -XX:OnOutOfMemoryError='/home/docker/oom-test/heapDump.sh'"
VOLUME ["/applog"]
ENTRYPOINT java ${JAVA_OPTS} -jar /home/docker/oom-test/app.jar
#在该脚本下修改hprof的文件名
datetime = $(date "%Y%m%d%H%M%S")
hprofs = `find /applog -name '*.hprof'`
for tmprof in $hprofs
do
mv $tmprof `echo "$tmprof.$datetime"`
done