上次提出了一个问题:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
方法一:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
WinDBG中,加载SOS模块:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
0:003> !eeversionøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0.50727.832 retailøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Workstation modeøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
SOS Version: 2.0.50727.832 retail buildøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
这里的Workstation mode表示的就是本机运行的是Workstation模式的垃圾回收方式。øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
方法二:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
首先列出某个托管线程当前加载的modulesøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
0:003> lmøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
startøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
endøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
module nameøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
00400000 00408000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
TestConcoleAppøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
00ec0000 00f06000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorlib_resourcesøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
…………………..øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
79000000 79045000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscoreeøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
79060000 790b3000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorjitøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
790c0000 79b90000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorlib_niøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
79e70000 7a3d6000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorwksøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(export symbols) øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
7c800000 7c91d000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
KERNEL32øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(export symbols)
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
C:\WINDOWS\system32\KERNEL32.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
7c920000 7c9b4000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
ntdlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(export symbols) øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
C:\WINDOWS\system32\ntdll.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
7d590000 7dd83000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
shell32øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(deferred)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Unloaded modules:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
60340000 60348000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
culture.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
接着列出mscorwks模块的详情:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
0:003> lm v m mscorwksøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
startøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
endøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
module nameøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
79e70000 7a3d6000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorwksøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
(export symbols) øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Loaded symbol image øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
file: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Image name: mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Timestamp:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Fri Apr 13 15:15:54 2007 (461F2E2A)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
CheckSum:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
00565A86øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
ImageSize:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
00566000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
File version:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0.50727.832øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Product version:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0.50727.832øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
File flags:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
0 (Mask 3F)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
File OS:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
4 Unknown Win32øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
File type:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0 DlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
File date:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
00000000.00000000øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Translations:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
0409.04b0øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
CompanyName:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Microsoft CorporationøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
ProductName:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Microsoft® .NET FrameworkøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
InternalName:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
OriginalFilename: mscorwks.dlløÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
ProductVersion:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0.50727.832øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
FileVersion:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
2.0.50727.832 (QFE.050727-8300)øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
FileDescription:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Microsoft .NET Runtime Common Language Runtime - WorkStation
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
LegalCopyright:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
© Microsoft Corporation.øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
All rights reserved.øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Comments:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Flavor=RetailøÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
Lm这个命令列出该线程加载的modules。用v参数来现实详情,m参数指定特定的modules。同样可以得到GC是运行在WorkStation模式下。øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
方法三:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
打开DotNet Framework配置工具,在“My Computer”上面点击右键,同样可以得到显示的是WorkStation模式。øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
      øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø

øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
      方法四:øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
可以在调试一个托管,或者是native线程,使用~k命令显示堆栈的调用情况。如果看到类似mscorwks!SVR:[img]editor/images/smilies/default/24.gif[/img]这样的方法,SVR就表示的是使用的Server模式。如果是看到类似mscorwks!WKS这样的字样,就表示的是使用的WorkStation模式。这也说明了在Framework2.0里面,这两种模式的实现,是在一个modules里面实现的。不过我翻遍了一个叫做IpSwiter的东西,也没用看到这样的字样…sad..øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
      well,that's all i know,and you can share your ways with me ^_^øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø
øÕc:Êg°ðÍwww.netcsharp.cn¥3³á¢íÔø