Runtime.getRuntime().availableProcessors() 不返回可用核心

问题描述 投票:0回答:1

我们有一台高端服务器机器,配有 4 个 Intel Xeon E7 4850 处理器(NUMA 节点),每个处理器有 10 个内核和 2 个线程。所以实际上我们一台机器有 80 个核心。 (Windows任务管理器显示80个核心) 现在我的问题是当我执行时

Runtime.getRuntime().availableProcessors()
它返回 40,因此我的应用程序仅生成 40 个线程。 为什么会这样?

multithreading jvm cpu-cores
1个回答
2
投票

除非您使用的是有错误的 Windows 2003:“Windows Server 2003 中错误地报告了支持超线程的物理处理器的数量或物理多核处理器的数量”...

...如果启用超线程,“40 个核心”的计数是错误的结果,这似乎是这种情况,因为 Windows 报告了正确的逻辑 CPU 核心数量。

如果 Java 修复不可用,那么您可以使用 JNI 调用 GetLogicalProcessorInformation() Windows API 调用(包含源代码,适用于 XP SP3 及更高版本)。

© www.soinside.com 2019 - 2024. All rights reserved.