java Runtime.getRuntime()。availableProcessors()和nproc返回不同的值

时间:2016-04-06 13:55:22

标签: java docker

我在Java app内运行docker container4 CPU限制为docker container10 CPU运行的机器nproc }}

docker container内拨打4时,我得到的结果是Runtime.getRuntime().availableProcessors(),但当我致电10时,我得到了Java

  • 为什么会这样? CPU如何查看所有Java
  • 除了使用nproc之外还有另一种方式Runtime.getRuntime().exec("nproc")获得与<form>相同的结果吗?

1 个答案:

答案 0 :(得分:1)

根据Ken Sipe(下面的链接),在使用共享cpus(默认在docker中)而不是cpusets(用于进程的固定cpus)时,java中有一个错误显示错误的cpus / cores。

无论此设置如何,我自己都会看到错误的数字:

Runtime.availableProcessors(),没有docker:8 在码头工作者我总是得到4,

而nproc表示1(当使用--cpuset-cpus = 0&lt; - 固定在cpu0上时)

请参阅https://vimeo.com/138955223