Обнаружение утечки канала WCF с помощью Windbg - PullRequest
1 голос
/ 26 января 2012

У меня есть сервис WCF с режимом обслуживания для каждого сеанса и использующий WIF для аутентификации / авторизации. Но некоторые клиенты делают утечки каналов.

Есть ли способ узнать, какой клиент протекает, используя дамп памяти и windbg? Я не могу использовать IP-адрес клиента, потому что более одного клиента приходит с одного и того же IP-адреса. Идентификация пользователя может быть полезной, но я не могу найти связь между утечкой экземпляра службы и использованным ClaimIdentity.

1 Ответ

2 голосов
/ 26 января 2012

Следующие 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 дневную пробную версию .

...