我们有一台高端服务器机器,配有4个Intel Xeon E7 4850处理器(NUMA节点),每个处理器有10个内核,2个线程。因此,我们有效地拥有80个核心机器。 (Windows任务管理器显示80个核心) 现在我的问题是我何时执行 调用Runtime.getRuntime()。availableProcessors() 它返回40,所以我的应用程序只产生40个线程。 为什么会这样?
答案 0 :(得分:2)
除非您使用的是有错误的Windows 2003:“在Windows Server 2003中错误地报告了物理超线程处理器的数量或物理多核处理器的数量” ...
...如果启用了超线程,那么“40核心”的计数结果是错误的,因为Windows报告了正确数量的逻辑CPU核心,这似乎就是这种情况。
如果Java修复程序不可用,那么您可以将JNI用于call the GetLogicalProcessorInformation() Windows API call(包含源代码,适用于XP SP3及更新版本。)