CodeDevMaster 2022-09-01 15:26 采纳率: 100%
浏览 32
已结题

Tomcat堆大小与运行程序堆占用以及Docker容器内存资源分配限制的疑问

疑问背景

使用Docker运行Tomcat,且Tomcat不做任何配置,在Tomcat中运行程序。


假设限制Tomcat容器内存占用:-m 5000m --memory-reservation 4500m


据了解,Tomcat在不配置堆的情况下,初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。即这里Tomcat的最大堆为5000*0.25=1250M


在portainer管理中查看Tomcat容器的内存资源占用如下:

img

疑问

如上Tomcat堆内存最大1250M,则Tomcat运行的服务的最大堆内存不超出1250M。这里Tomcat容器占用近2G是什么情况?即使假设Tomcat中程序占满1250M内存,虽然有一定额外服务内存占用,但不应该占用这么多内存吧?


对Tomcat容器内存资源做上述限制,按Tomcat默认堆内存分配只有1250M,此时调整Tomcat的堆设置,比例如何调整最为合适?

  • 写回答

2条回答 默认 最新

  • CodeDevMaster Java领域优质创作者 2022-09-08 08:37
    关注

    1.JVM内存包含两种:堆内存和非堆内存。因此最大1250的堆+非堆内存+部分服务运行内存 总占用构成约2G


    2.堆的设置需要结合具体机器做压测处理,得出最佳比例。Docker中给Tomcat设置JVM参数只需要在启动容器时添加环境变量命令:-e JAVA_OPTS="-server -Xms1024m -Xmx2024m " 另外还可以设置新生代、老年代、垃圾回收机制等参数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 修改了问题 9月1日
  • 创建了问题 9月1日