在 Java 中Runtime.getRuntime().availableProcessors()
,有以下 Javadoc 的方法:
返回 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 可见的多。
注意:这对于运行多个作业的机器很有用,在这些作业中您不希望出现高资源争用,并且希望资源配置不足(甚至过度配置)。
在某些硬件(服务器)上,可以在不重新启动系统的情况下热插拔处理器。这可能会导致处理器数量发生变化。尽管更常见的原因是系统管理员更改了处理器调度策略。
您可以使用 java 命令上的选项自定义 Java 应用程序可用的资源。我实际上不知道开关的确切名称,但您可以自定义一堆东西。
为什么要为 JVM 实例分配更少的处理器?这取决于!也许您正在托管 Tomcat 并希望将可用资源分发给您的客户。
希望这可以帮助。