【问题标题】:How to dockerized java microservices efficiently如何高效地对 Java 微服务进行 docker 化
【发布时间】:2017-01-14 19:46:24
【问题描述】:

虽然 java 应用程序服务器将扩展一个独特的 JVM 以运行多个(微)服务,但 dockerized java 微服务架构将为每个 dockerized 微服务运行一个 JVM。 考虑到 20 多个 java 微服务和有限数量的主机,每个主机上的 JVM 消耗的资源量似乎是巨大的。

有没有有效的方法来解决这个问题?是否可以调整每个 JVM 以限制资源消耗? 目的是限制在 java 微服务架构中使用 docker 的开销。

【问题讨论】:

  • 你什么都没问。你有什么问题?

标签: java docker jvm microservices application-server


【解决方案1】:

运行的每个 Docker 和 JVM 副本都使用内存。通常在单个节点上拥有多个 JVM 会使用共享内存,但这不是 docker 的选项。

您可以做的是减少每个 JVM 的最大堆大小。但是,我将允许每个 docker 映像至少 1 GB 作为开销加上每个 JVM 的堆大小。虽然这听起来像是很多内存,但现在已经不那么昂贵了。

假设您给每个 JVM 一个 2 GB 堆并为 docker+JVM 添加 1 GB,您需要一个 64 GB 的服务器来运行 20 个 JVM/docker。

【讨论】:

  • 感谢您的回答。我在哪里可以找到 JVM 堆栈的一些“临时”值?实际上,500MB 对于我的 µS(即使是负责的)来说似乎已经足够了。 (我用 jvisualv 检查它)。所以我对你推荐的价值观印象深刻。
  • @DouglasAdams 我们的一些客户拥有 100 TB 虚拟内存大小的 JVM。如果每个 JVM 有 0.5 GB 堆,你会发现你需要更多的开销。
  • @DouglasAdams JVM 堆栈的值是什么意思?你的意思是什么是默认值?如果您有少量线程,则不需要调整。
  • 我们的 µS 通常是单线程的并且不是很贪心(没有复杂的演算)。在这种情况下,您是否建议减少堆的值?还是保留默认值更好?
  • @DouglasAdams 如果每个 JVM 都在它自己的 Docker 中,默认情况下它将使用每个 Docker 的 1/4 内存。假设 JVM 不是机器上唯一的应用程序,则对 JVM 进行了调整。您很可能希望将最大堆大小设置为操作系统和运行 JVM 所需的内存之后的所有可用内存。
猜你喜欢
  • 2019-10-29
  • 2020-06-17
  • 2016-05-19
  • 1970-01-01
  • 2018-03-21
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多