Docker Java 可用 CPU 核心数

ben*_*ist 6 java docker

获取 docker 实例能够使用的 CPU 核心数的安全方法是什么?

我知道它是纯 Java 语言(也包括逻辑核心):

int cores = Runtime.getRuntime().availableProcessors();
Run Code Online (Sandbox Code Playgroud)

当 Java 应用程序在 docker 映像内运行时,这也可以吗?还是我应该考虑其他因素?

mda*_*win 4

取决于您的 Java 版本。旧版本的 Java 会为您提供 docker 服务器上的核心数量,而您可能想要的是容器可用的数量。从 8u131 和 Java 9 开始,此问题已修复

  • 这是正确的答案,可以使用 jshell 轻松测试。只需放入带有或不带有 --cpus 1 的 dockerized“JShell”,然后运行“Runtime.getRuntime().availableProcessors();”即可。从命令行:`docker run -it --rm --cpus 1 openjdk:11-jdk` (2认同)
  • docker run -it --rm --cpus 2.5 openjdk:17 bash -c 'echo "Runtime.getRuntime().availableProcessors()" | jshell' (2认同)