Docker 镜像 JVM 调优
当我们使用Java环境基础镜像的时候,期望在启动 Docker 镜像的时候对JVM参数进行一定的调优,通常要么是启动的时候写死优化变量,但是这种方式不方便,还有就通过自定义环境变量JAVA_OPTS或者使用JAVA_TOOL_OPTIONS方式。
基于 JAVA_OPTS 环境变量(不推荐)
此方式需要 在 Dockerfile 中定义变量 JAVA_OPTS,并在启动命令中使用 JAVA_OPTS
Dockerfile 示例:
然后;运行 docker run 命令;运行时通过-e重置覆盖环境变量中JAVA_OPTS参数信息。
进入容器
查看java应用,就可以看到
结果如下:
基于 JAVA_TOOL_OPTIONS 环境变量(推荐)
JAVA_TOOL_OPTIONS 就是个环境变量,它会被JNI API的JNI_CreateJavaVM函数使用。因为JAVA_TOOL_OPTIONS是被被JNI_CreateJavaVM调用的,顾名思义是创建VM
各种OPTIONS的区别:
也许你经常遇到JAVA_OPTS、JAVAOPTIONS和JAVA_TOOL_OPTIONS,那么他们有什么不同呢?
JAVA_OPTS:常用于一些应用的配置,如Tomcat,但它一般不作为环境变量,也不能被JVM识别的,是那些应用的自定义配置;
JAVAOPTIONS:也是作为环境变量来替代命令行参数的,但它是JVM厂家自定义的,可以覆盖JAVA_TOOL_OPTIONS,但各厂家的不同,JAVAOPTIONS是Oracle的JVM,而IBM的则是用IBM_JAVA_OPTIONS。
JAVA_TOOL_OPTIONS:是标准的,所有虚拟机都能识别和应用的。
https://www.jb51.net/article/207937.htm
分配内存 堆配置推荐
“-XX:InitiatingHeapOccupancyPercent=60”, “-XX:MinHeapDeltaBytes=262144”, “-XX:MetaspaceSize=128m”, “-XX:MaxMetaspaceSize=256m”, “-XX:InitialHeapSize=256M”, “-XX:MaxHeapSize=256M”, “-XX:+PrintGCDetails”, “-XX:+PrintGCTimeStamps”, “-XX:+UseG1GC”, “-XX:GCLogFileSize=20m”, “-XX:+HeapDumpOnOutOfMemoryError”, “-XX:HeapDumpPath=/logs/heaperror.log”, “-Xloggc:/logs/gcerror.log”,
- 2核4G
- 4核8G
常用的JVM配置参数有哪些?
当堆内存不够的话,会爆出OOM错误
在这里插入图片描述
因为是由四位二进制数组成,所以垃圾最大年龄为15.因为0-15是16个数字
最后编辑:Jeebiz 更新时间:2025-04-24 16:40