Java:限制 JVM 可以使用的内核数

ogg*_*ron 6 java multi-core threads

多个用户在 60 核计算服务器(基于 Linux/Ubuntu)上运行 Java 应用程序。有不同的应用程序,其中大多数不是内部开发的。

虽然系统管理员认为给定用户的 Java 进程在任何给定时刻使用 10 个内核都可以,但她希望他们使用的内核不要超过 10 个。

是否有任何 Java 或 OS 配置可用于防止进程以无限方式获取计算资源?

HBr*_*ijn 5

在操作系统方面:

  • 我想说经典的方法是设置CPU亲和力taskset

  • 更好的选择是使用cgroups.

  • 流行的解决方案是在Docker容器中运行应用程序。然而,在 Java 8 之前,JVM 无法理解 Docker 施加的限制(仅在 8u131+ 向后移植后可用,不确定它是否在 Java9 中作为实验性用于 CPU 部分,但它用于内存,并且在Java10)