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

我在docker container运行一个Java app ,该docker container限制为4 CPUdocker container运行的机器有10 CPU

nproc docker container调用nproc ,我得到了4 ,但是当我调用Runtime.getRuntime().availableProcessors()我得到了10

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

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

然而,我自己却看到错误的数字,不pipe这个设置:

Runtime.availableProcessors(),没有docker:8在docker我总是得到4,

而nproc说1(当使用 – cpuset-cpus = 0 < – 固定在cpu0)

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