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


当您允许 JVM ergonomics 为垃圾收集器、堆大小和运行时编译器设置默认值时,Linux 容器中运行的 Java 进程的行为与预期一样。当您在不执行任何调优参数的 Java 应用程序时,java -jar mypplication-fat.jar urllib-osgithe 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.