判断GC运行模式的几种方法
2008-03-09 14:39
411 查看
上次提出了一个问题:
一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?
这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:
方法一:
在WinDBG中,加载SOS模块:
0:003> !eeversion
2.0.50727.832 retail
Workstation mode
SOS Version: 2.0.50727.832 retail build
这里的Workstation mode表示的就是本机运行的是Workstation模式的垃圾回收方式。
方法二:
首先列出某个托管线程当前加载的modules:
0:003> lm
start end module name
00400000 00408000 TestConcoleApp (deferred)
00ec0000 00f06000 mscorlib_resources (deferred)
…………………..
79000000 79045000 mscoree (deferred)
79060000 790b3000 mscorjit (deferred)
790c0000 79b90000 mscorlib_ni (deferred)
79e70000 7a3d6000 mscorwks (export symbols)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
7c800000 7c91d000 KERNEL32 (export symbols)
C:\WINDOWS\system32\KERNEL32.dll
7c920000 7c9b4000 ntdll (export symbols)
C:\WINDOWS\system32\ntdll.dll
7d590000 7dd83000 shell32 (deferred)
Unloaded modules:
60340000 60348000 culture.dll
接着列出mscorwks模块的详情:
0:003> lm v m mscorwks
start end module name
79e70000 7a3d6000 mscorwks (export symbols)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Loaded symbol image
file: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Image name: mscorwks.dll
Timestamp: Fri Apr 13 15:15:54 2007 (461F2E2A)
CheckSum: 00565A86
ImageSize: 00566000
File version: 2.0.50727.832
Product version: 2.0.50727.832
File flags: 0 (Mask 3F)
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft® .NET Framework
InternalName: mscorwks.dll
OriginalFilename: mscorwks.dll
ProductVersion: 2.0.50727.832
FileVersion: 2.0.50727.832 (QFE.050727-8300)
FileDescription: Microsoft .NET Runtime Common Language Runtime - WorkStation
LegalCopyright: © Microsoft Corporation. All rights reserved.
Comments: Flavor=Retail
Lm这个命令列出该线程加载的modules。用v参数来现实详情,m参数指定特定的modules。同样可以得到GC是运行在WorkStation模式下。
方法三:
打开DotNet Framework配置工具,在“My Computer”上面点击右键,同样可以得到显示的是WorkStation模式。
![](http://images.cnblogs.com/cnblogs_com/lbq1221119/112219/gc.JPG)
方法四:
可以在调试一个托管,或者是native线程,使用~k命令显示堆栈的调用情况。如果看到类似mscorwks!SVR::gc_heap::这样的方法,SVR就表示的是使用的Server模式。如果是看到类似mscorwks!WKS这样的字样,就表示的是使用的WorkStation模式。这也说明了在Framework2.0里面,这两种模式的实现,是在一个modules里面实现的。不过我翻遍了一个叫做IpSwiter的东西,也没用看到这样的字样…sad..
well,that's all i know,and you can share your ways with me ^_^
一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?
这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:
方法一:
在WinDBG中,加载SOS模块:
0:003> !eeversion
2.0.50727.832 retail
Workstation mode
SOS Version: 2.0.50727.832 retail build
这里的Workstation mode表示的就是本机运行的是Workstation模式的垃圾回收方式。
方法二:
首先列出某个托管线程当前加载的modules:
0:003> lm
start end module name
00400000 00408000 TestConcoleApp (deferred)
00ec0000 00f06000 mscorlib_resources (deferred)
…………………..
79000000 79045000 mscoree (deferred)
79060000 790b3000 mscorjit (deferred)
790c0000 79b90000 mscorlib_ni (deferred)
79e70000 7a3d6000 mscorwks (export symbols)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
7c800000 7c91d000 KERNEL32 (export symbols)
C:\WINDOWS\system32\KERNEL32.dll
7c920000 7c9b4000 ntdll (export symbols)
C:\WINDOWS\system32\ntdll.dll
7d590000 7dd83000 shell32 (deferred)
Unloaded modules:
60340000 60348000 culture.dll
接着列出mscorwks模块的详情:
0:003> lm v m mscorwks
start end module name
79e70000 7a3d6000 mscorwks (export symbols)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Loaded symbol image
file: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Image name: mscorwks.dll
Timestamp: Fri Apr 13 15:15:54 2007 (461F2E2A)
CheckSum: 00565A86
ImageSize: 00566000
File version: 2.0.50727.832
Product version: 2.0.50727.832
File flags: 0 (Mask 3F)
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft® .NET Framework
InternalName: mscorwks.dll
OriginalFilename: mscorwks.dll
ProductVersion: 2.0.50727.832
FileVersion: 2.0.50727.832 (QFE.050727-8300)
FileDescription: Microsoft .NET Runtime Common Language Runtime - WorkStation
LegalCopyright: © Microsoft Corporation. All rights reserved.
Comments: Flavor=Retail
Lm这个命令列出该线程加载的modules。用v参数来现实详情,m参数指定特定的modules。同样可以得到GC是运行在WorkStation模式下。
方法三:
打开DotNet Framework配置工具,在“My Computer”上面点击右键,同样可以得到显示的是WorkStation模式。
方法四:
可以在调试一个托管,或者是native线程,使用~k命令显示堆栈的调用情况。如果看到类似mscorwks!SVR::gc_heap::这样的方法,SVR就表示的是使用的Server模式。如果是看到类似mscorwks!WKS这样的字样,就表示的是使用的WorkStation模式。这也说明了在Framework2.0里面,这两种模式的实现,是在一个modules里面实现的。不过我翻遍了一个叫做IpSwiter的东西,也没用看到这样的字样…sad..
well,that's all i know,and you can share your ways with me ^_^
相关文章推荐
- 判断GC运行模式的几种方法
- 如何判断程序是否重复运行的几种方法
- 如何判断程序是否重复运行的几种方法
- 如何判断程序是否重复运行的几种方法
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- 如何判断程序是否重复运行的几种方法
- C++中几种测试程序运行时间的方法
- 转:Flex判断数据类型的几种方法
- PHP判断远程图片是否存在的几种方法
- 如何判断程序加载时间 方法 运行时间
- C#中怎么判断字符串为空的几种方法
- vbs调用cmd,并判断运行结果的方法
- Mac运行exe的几种方法,欢迎补充!
- C++ 计算代码运行时间的几种方法(转)
- 提交表单的几种判断方法()
- 设置IE兼容模式的几种方法
- Andorid 判断手机是否有下方导航栏(NavigationBar)的几种方法
- Shell判断字符串包含关系的几种方法
- Linux 技巧:让进程在后台可靠运行的几种方法
- 判断线程运行状态的两种方法