CLR 为每个 CPU 或每个核心(在服务器 GC 模式下)创建一个托管堆?
CLR creates a managed heap per CPU or per Core (when in Server GC mode)?
我在四核 CPU.
生产机器上管理 Windows 服务(为数千 SOAP/SignalR 客户提供服务)运行
"Workstation GC mode" 已经 运行 一段时间了。最近我开始寻找 "Server GC mode" 来确定它是否是适合我的情况的更好选择。
目前我坚持这个:
对于 "Server GC mode" Official Documentation 个状态 - "A heap and a dedicated thread to perform garbage collection are provided for each CPU, and the heaps are collected at the same time"。
并且不清楚 "each CPU" 是指 CPU 还是 CPU Core (physical/logical)。我调查了其他来源,事情变得更糟,因为它们相互矛盾。
所以我的问题是:
根据什么(CPU/CPU核心)创建堆和专用线程?
在 运行 托管进程中是否有工具(探查器)来检查这些堆?
- 是的。创建一个堆。实际上每个逻辑核心有 1 个堆和 2 个线程,包括服务器 gc 模式中的后台模式。
- 使用系统内部的 VMMAP 工具。它详细显示了各个堆。其他替代方法是将 sos.dll 与 windbg 一起使用。
我在四核 CPU.
生产机器上管理 Windows 服务(为数千 SOAP/SignalR 客户提供服务)运行
"Workstation GC mode" 已经 运行 一段时间了。最近我开始寻找 "Server GC mode" 来确定它是否是适合我的情况的更好选择。
目前我坚持这个:
对于 "Server GC mode" Official Documentation 个状态 - "A heap and a dedicated thread to perform garbage collection are provided for each CPU, and the heaps are collected at the same time"。
并且不清楚 "each CPU" 是指 CPU 还是 CPU Core (physical/logical)。我调查了其他来源,事情变得更糟,因为它们相互矛盾。
所以我的问题是:
根据什么(CPU/CPU核心)创建堆和专用线程?
在 运行 托管进程中是否有工具(探查器)来检查这些堆?
- 是的。创建一个堆。实际上每个逻辑核心有 1 个堆和 2 个线程,包括服务器 gc 模式中的后台模式。
- 使用系统内部的 VMMAP 工具。它详细显示了各个堆。其他替代方法是将 sos.dll 与 windbg 一起使用。