使用Docker运行Tomcat,且Tomcat不做任何配置,在Tomcat中运行程序。
假设限制Tomcat容器内存占用:-m 5000m --memory-reservation 4500m
据了解,Tomcat在不配置堆的情况下,初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。即这里Tomcat的最大堆为5000*0.25=1250M
在portainer管理中查看Tomcat容器的内存资源占用如下:
如上Tomcat堆内存最大1250M,则Tomcat运行的服务的最大堆内存不超出1250M。这里Tomcat容器占用近2G是什么情况?即使假设Tomcat中程序占满1250M内存,虽然有一定额外服务内存占用,但不应该占用这么多内存吧?
对Tomcat容器内存资源做上述限制,按Tomcat默认堆内存分配只有1250M,此时调整Tomcat的堆设置,比例如何调整最为合适?
1.JVM内存包含两种:堆内存和非堆内存。因此最大1250的堆+非堆内存+部分服务运行内存 总占用构成约2G
2.堆的设置需要结合具体机器做压测处理,得出最佳比例。Docker中给Tomcat设置JVM参数只需要在启动容器时添加环境变量命令:-e JAVA_OPTS="-server -Xms1024m -Xmx2024m "
另外还可以设置新生代、老年代、垃圾回收机制等参数。
检查jdk的版本问题