【发布时间】:2016-06-10 14:29:09
【问题描述】:
我有一个简单的压力测试,它根据运行它的服务器具有可配置的线程数。在一台具有 16 个内核的 Windows 机器上,我能够启动该进程,该进程依次启动 16 个线程并在测试期间保持所有内核最大化。
在另一台具有 16 个内核的 Windows 机器上,我运行了测试,但它只使用了 16 个可用 CPU 中的 8 个,即它使用一个 CPU 而不是另一个。
我知道这更像是一个 Windows 配置问题,而不是一个 Java 问题,因为我已经展示了测试本身在一台机器而不是另一台机器上的行为符合预期。
使用任务管理器,我可以看到系统有 16 个内核,但有些东西阻止了对其他 8 个内核的访问。
是否存在阻止单个进程使用所有内核的设置?
如果 StackOverflow 不是这个问题的正确位置,请建议另一个 Stack* 我应该把它移到哪里。
更新一个
在有问题的机器上,我之前尝试运行 1 个进程和 16 个线程。如果我运行两个进程,每个进程有 8 个线程,我就能消耗 100% 的内核。
【问题讨论】:
-
只是Java无法使用其他8个内核,还是没有程序可以使用它们?
-
@Joni 我正在努力寻找可以回答这个问题的东西。很快就会更新问题。
-
Java 中没有任何东西可以让您限制它可以使用的内核数量,如果您愿意,您无法单独执行您在 Java 中建议的操作。它必须在操作系统级别进行配置。
-
@PeterLawrey 完全同意。如问题所述,这不是 Java 问题。我包括了这是一个 Java 测试这一事实,因为人们会问我正在运行什么,以及我如何确定我正在启动多少线程。
标签: java windows windows-server-2012 windows-server