附录 F. 调整 JVM 以在 Linux 容器中运行


在 Linux 容器中运行的 Java 进程不会象预期一样工作,如果您允许 JVM 诊断设置垃圾回收器、堆大小和运行时编译器的默认值,则不会如预期。当您在没有调整参数的情况下执行 Java 应用程序时,java -jar mypplication-fat.jar sHistoryLimit-mvnthe JVM 会自动根据主机限制设置多个参数,而不是 容器限制。

本节提供有关在 Linux 容器中打包 Java 应用程序的信息,以便考虑计算默认值时容器的限制。

F.1. 调优 JVM

当前 Java JVM 的生成不是容器感知型,因此它们根据物理主机的大小(而非容器的大小)分配资源。例如,JVM 通常将 最大堆大小设置为 主机上的物理内存的 1/4。在大型主机上,此值可轻松超过为容器定义的内存限值,如果在运行时超过容器限制,OpenShift 将终止应用。

要解决这个问题,您可以使用 OpenShift 基础镜像上的 Fuse,它能够了解 Java JVM 在受限容器内运行,并在不手动完成时自动调整最大堆大小。它为运行应用的 JVM 提供了最大内存限值和核心限制的解决方案。对于 OpenShift 镜像上的 Fuse,它可以:

  • 根据容器内核设置 CICompilerCount
  • 当容器内存限制低于 300MB 时,禁用 C2 JIT 编译器
  • 在 300MB 以下时,将容器内存限值的一度用于默认堆大小
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat