2012-01-26 3 views
1

セッションごとのサービスモードでWCFサービスを使用し、認証/認可にWIFを使用しています。しかし、クライアントの中にはチャンネルリークを起こしているものもあります。Windbgを使用してWCFチャネルが漏れていることを検出します。

メモリダンプとwindbgを使用してどのクライアントがリークしているかを確認する方法はありますか? 複数のクライアントが同じIPから来ているため、クライアントIPアドレスを使用できません。 ユーザIDは有用ですが、リークされたサービスインスタンスと使用された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。私はすべてのsosコマンドを知っています。問題は、ClaimIdentityとServiceオブジェクトの関係を見つける方法です。 WCFの観点からは、通常の状況であるため、メモリプロファイラはどちらも助けません。これはメモリリークではありません。ちょうど誰かが近くのチャンネルを呼び出さなかった – Mijalko

+0

チャンネルからあなたはOperationContextに行くことができるかもしれません、そして、あなたはそこからClaimIdentityを得ることができると思います。私はWIFを使用していないので、これについてはわかりません。 –

関連する問題