java Runtime.getRuntime()。availableProcessors()和nproc返回不同的值
我在docker container
运行一个Java app
,该docker container
限制为4 CPU
, docker 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)