在Java中,方法Runtime.getRuntime().availableProcessors()
具有以下Javadoc:
返回Java虚拟机可用的处理器数。 在特定的虚拟机调用期间,此值可能会更改。
价值如何实际改变?在什么情况下,JVM可用的处理器比实际安装的处理器少?
纳斯
答案 0 :(得分:11)
Linux命令taskset(1)
可用于强制进程使用特定的CPU或特定的CPU集合;修改正在运行的程序以强制它到一个或多个处理器非常容易。例如,
taskset -p `pidof java` --cpu-list 0,5,7,9-11
答案 1 :(得分:5)
在Windows中,可以通过一些简单的属性更改允许应用程序使用的核心数。在虚拟化环境中,您还可以将核心限制为VM,以便只看到VM看到的核心。在Linux / Unix中,您可以设置核心关联,以便应用程序或用户无法使用所有核心,因此您可能安装了比JVM可见的更多核心。
注意:这对于运行多个作业的计算机非常有用,在这些作业中您不需要高资源争用,并且您希望提供资源(甚至过度配置)资源。
答案 2 :(得分:2)
在某些硬件(服务器)上,可以在不重新启动系统的情况下热交换处理器。这可能会导致处理器数量发生变化。虽然更常见的原因是系统管理员更改了处理器调度策略。
答案 3 :(得分:1)
您可以使用java命令中的选项自定义java应用程序可用的资源。我实际上不知道开关的确切名称,但你可以自定义一堆东西。
为什么要为JVM实例提供更少的处理器?这取决于!也许你是托管tomcats并想分发给你的客户可用的资源。
希望这有帮助。