2012-01-26 41 views
1

我有WCF服務與每會話服務模式並使用WIF進行身份驗證/授權。但一些客戶正在使渠道泄漏。使用Windbg檢測WCF通道泄漏

有沒有辦法查看哪個客戶端使用內存轉儲和windbg泄漏? 我無法使用客戶端IP地址,因爲多個客戶端來自同一個IP。 用戶標識可能很有用,但我無法找到泄漏的服務實例和使用的ClaimIdentity之間的連接。

回答

2

以下的WinDbg可以幫助你找到泄漏渠道:

!dumpheap -type <Some WCF Type or yours that you suspect to be leaking> 

這將顯示一個特定類型的實例的列表。一旦你確定了泄漏物體

!do <object address> 

這將讓你檢查對象和它的屬性。這樣,你也許能得到ClaimID的用於此通道

!gcroot 

這將讓你知道什麼對象保持泄漏對象在內存中,並幫助您解決問題。這聽起來比實際識別客戶端更有用,因爲它似乎更可能是您的服務器代碼的問題。

其他有用的命令

!gcwhere <Address> 
!FindRoots -gen 1 
!FindRoots <Address> 
!GCHandleLeaks 
!eeheap 
!dumpheap -stat 
!TraverseHeap fileName 
!ObjSize 
!FindRoots 

這麼說,我已經推薦展鵬的內存分析器。在過去的幾年裏,識別內存泄漏已經有了很長的路要走。你可以得到一個14 day trial

+0

Tnx Miguel for answer。我知道所有的sos命令。問題是如何找到ClaimIdentity和Service對象之間的關係。 內存分析器不能幫助我,因爲從WCF的角度來看這是正常的情況。這不是內存泄漏。只是有人沒有呼叫關閉頻道 – Mijalko

+0

從頻道您可能能夠到OperationContext,我認爲你可以從那裏獲得ClaimIdentity。我沒有使用WIF,所以我不確定這一點。 –