Java进程报告“不正确”的可用处理器数量

我在一个8节点的NUMA机器上运行一个Java 1.6进程,使用:

numactl --cpunodebind=0 java -server com.foo.Bar 

每个节点有8个CPU,由numactl --hardware报告:

 available: 8 nodes (0-7) node 0 cpus: 1 2 3 4 5 6 7 8 node 0 size: ... node 0 free: ... node 1 cpus: 9 10 11 12 13 14 15 16 node 1 size: ... node 1 free: ... ... node 7 cpus: 56 57 58 59 60 61 62 63 node 7 size: ... node 7 free: ... 

函数调用Runtime.getRuntime().availableProcessors()返回64

为什么进程的Runtime对象报告64个可用的处理器,尽pipe有cpunodebind限制? 有没有办法获得Java进程可用的处理器的实际数量?