2010-03-10 2 views
3

최근에 WCF 서비스의 .NET 메모리 카운터 몇 시간을 기록합니다. 이 서비스는 IIS에서 Win2k8, 8 코어, 20GB RAM이있는 x64에서 호스팅됩니다.ASP.NET/WCF : 논리/물리 스레드가 전체 GC주기에서 중단되는 이유는 무엇입니까?

나는 GC가 꽤 건강하다는 것을 알 수 있으며, 전체 수집 만 수행합니다. 매 2 시간마다!

같은시기에 물리적 스레드와 논리적 스레드의 수가 증가한다는 사실을 발견했습니다. 전체] 렉션이 _ 생하면 실제 스레드와 논리 스레드의 수가 다시 떨어지고 같은 레벨로 다시 증가합니다.

GC 전체 수집주기와 스레드 드롭은 서로 관련이있는 이유는 무엇입니까? 스레드 수가 계속해서 증가하는 이유는 무엇입니까?

이것은 순수한 ASP.NET/WCF 스레딩 모델입니다. 스레드 풀은 성장하고 시간이 지남에 따라 수축 될 때 스레드가 생성되고 죽을 얻을 : 없음 사용자 정의 스레드 등

감사합니다, 알렉스

답변

1

대답은 실제로 매우 간단했다처럼 보이는 양산되고 있지. 일반적으로 스레드는 상대적으로 긴 수명을 가지므로 세대 2에서 끝납니다. 이것이 자연스럽게 전체 GC 사이클에서만 정리 된 이유입니다.

재미있는 점은 메모리 관리 애플리케이션이 WinDbg에서 관찰 할 수있는 많은 쓰레드로 끝날 수 있다는 것입니다. Full GC는 몇 시간 또는 며칠 후에 만 ​​발생할 수 있기 때문입니다! 일부 MS 블로그에 따르면 해당 죽은 스레드는 관리되지 않는 C++ 스레드 객체가 자원 집약적 인 것처럼 보이기 때문에 정말 좋은 것은 아니지만 더 이상 불행하게도이 블로그를 찾을 수 없습니다 ....). 유도 된 Full GC가 특정 시간 간격에서 의미가있는 드문 경우 중 하나인지 궁금합니다.

관련 문제