Java:JVM可用的核心数?

7
在Java中有一个方法Runtime.getRuntime().availableProcessors(),其Javadoc如下:

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

这个值怎么会实际上发生变化呢?例如,在什么情况下会有比物理安装的处理器数量更少的处理器可供JVM使用?
Jonas

这是一个相关的SO帖子链接:https://dev59.com/Q2kw5IYBdhLWcg3wGWxk。 - rrufai
4个回答

12

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

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

5
在Windows中,可以通过一些简单的属性来更改应用程序允许使用的内核数。在虚拟化环境中,你也可以将内核限制为虚拟机,这样你只能看到虚拟机所看到的内核。在Linux / Unix中,你可以设置内核亲和性,以便应用程序或用户不能使用所有内核,因此可能会安装比JVM可见的内核更多的内核。
注意:对于运行多个作业的机器,这很有用,你不想要高资源争用,并且想要欠供(甚至超供)资源。

2

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


1

您可以使用Java命令的选项自定义可用于Java应用程序的资源。我实际上不知道这些开关的确切名称,但您可以自定义许多内容。

为什么要将JVM实例的处理器数量减少?这取决于情况!也许您正在托管Tomcat并希望分配可用于客户的资源。

希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接