1

セッション サービス モードごとの WCF サービスがあり、認証/承認に WIF を使用しています。しかし、一部のクライアントはチャネルをリークさせています。

メモリ ダンプと windbg を使用してリークしているクライアントを確認する方法はありますか? 複数のクライアントが同じ IP から来ているため、クライアントの IP アドレスを使用できません。ユーザー ID は便利ですが、リークされたサービス インスタンスと使用されている ClaimIdentity の間の接続が見つかりません。

4

1 に答える 1

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

そうは言っても、RedGate のメモリ プロファイラーをお勧めします。メモリ リークの特定は、ここ数年で大きく進歩しました。14 日間の試用版を入手できます。

于 2012-01-26T11:10:43.157 に答える