出于某种目的,需要JVM考虑它在具有N核心而不是实际核心(例如4核心16)的板上运行。
JVM
N
4
16
JVM 在基于Mandriva / Red Hat Linux内核的某些Linux构建下运行。
这个问题是临界情况,因为我希望这个问题有各种解决方案。这不是纯粹的linux-administration问题,也不是纯粹的程序员问题。
所以…有什么想法吗?
以下Java程序显示Java VM看到的处理器数量:
public class AvailableProcessors { public static void main(String... args) { System.out.println(Runtime.getRuntime().availableProcessors()); } }
如果我在家用计算机上执行此程序,它将显示4,这是实际的内核数(包括超线程)。现在,让我们欺骗Java VM,使其相信只有两个处理器:
$ echo '0-1' > /tmp/online $ mount --bind /tmp/online /sys/devices/system/cpu/online
如果我再次运行上述程序,它将打印2而不是4。
2
此技巧会影响系统上的所有进程。但是,可以将效果仅限制于某些过程。Linux上的每个进程都可以拥有自己的安装点名称空间。例如,请参见 mount(2) 手册页中的预处理名称空间部分。例如,您可以使用lxc来使用其自己的 安装名称空间 启动新进程。