Java:JVM可用的核心?

在Java中,方法Runtime.getRuntime().availableProcessors()具有以下Javadoc:

返回Java虚拟机可用的处理器数。 在特定的虚拟机调用期间,此值可能会更改。

价值如何实际改变? 在什么情况下,JVM可用的处理器比物理安装的处理器少?

乔纳斯

Linux命令taskset(1)可用于强制进程使用特定CPU或特定CPU集; 修改正在运行的程序以强制它到一个或多个处理器非常容易。 例如,

 taskset -p `pidof java` --cpu-list 0,5,7,9-11 

在Windows中,可以通过一些简单的属性更改允许应用程序使用的核心数。 在虚拟化环境中,您还可以将核心限制为VM,这样您只能看到VM看到的核心。 在Linux / Unix中,您可以设置核心关联性,以便应用程序或用户无法使用所有核心,因此您可能安装的核心数多于JVM可见的核心数。

注意:这对于运行多个作业的计算机非常有用,在这些计算机中,您不希望出现高资源争用,并且您希望提供不足(或甚至过度配置)资源。

在某些硬件(服务器)上,可以在不重启系统的情况下热交换处理器。 这可能会导致处理器数量发生变化。 虽然更常见的原因是sysadmin更改了处理器调度策略。

您可以使用java命令中的选项自定义Java应用程序可用的资源。 我实际上不知道开关的确切名称,但你可以自定义一堆东西。

为什么要为JVM实例提供更少的处理器? 这取决于! 也许你是托管tomcats并希望分配给你的客户可用的资源。

希望这可以帮助。