判斷GC運(yùn)行模式的幾種方法
上次提出了一個(gè)問題:
一個(gè)托管進(jìn)程,如果運(yùn)行在一個(gè)雙核CPU的機(jī)器上,GC是運(yùn)行于Server GC模式,在假設(shè)CPU沒有Hyper thread功能的話,這個(gè)托管進(jìn)程會(huì)有幾個(gè)GC Thread?可以用調(diào)試工具來證明你的判斷嗎?
這個(gè)問題的答案,想必很多人也知道,幾個(gè)cpu就幾個(gè)GC Thread。不過接下來的內(nèi)容,主要側(cè)重于,變換幾種不同的方式來解決這個(gè)問題:
方法一:
在WinDBG中,加載SOS模塊:
0:003> !eeversion
2.0.50727.832 retail
Workstation mode
SOS Version: 2.0.50727.832 retail build
這里的Workstation mode表示的就是本機(jī)運(yùn)行的是Workstation模式的垃圾回收方式。
方法二:
首先列出某個(gè)托管線程當(dāng)前加載的modules:
0:003> lm
start end module name
00400000 00408000 TestConcoleApp (deferred)
00ec0000
…………………..
79000000 79045000 mscoree (deferred)
79060000 790b3000 mscorjit (deferred)
79e70000
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
C:\WINDOWS\system32\KERNEL32.dll
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
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 (
CheckSum:
ImageSize: 00566000
File version: 2.0.50727.832
Product version: 2.0.50727.832
File flags: 0 (Mask
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這個(gè)命令列出該線程加載的modules。用v參數(shù)來現(xiàn)實(shí)詳情,m參數(shù)指定特定的modules。同樣可以得到GC是運(yùn)行在WorkStation模式下。
方法三:
打開DotNet Framework配置工具,在“My Computer”上面點(diǎn)擊右鍵,同樣可以得到顯示的是WorkStation模式。
方法四:
可以在調(diào)試一個(gè)托管,或者是native線程,使用~k命令顯示堆棧的調(diào)用情況。如果看到類似mscorwks!SVR::gc_heap::這樣的方法,SVR就表示的是使用的Server模式。如果是看到類似mscorwks!WKS這樣的字樣,就表示的是使用的WorkStation模式。這也說明了在Framework2.0里面,這兩種模式的實(shí)現(xiàn),是在一個(gè)modules里面實(shí)現(xiàn)的。不過我翻遍了一個(gè)叫做IpSwiter的東西,也沒用看到這樣的字樣…sad..
well,that's all i know,and you can share your ways with me ^_^
posted on 2008-03-09 14:39 lbq1221119 閱讀(3200) 評(píng)論(18) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)