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

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日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理