2011-04-11 4 views
3

실행중인 Windows 서비스에 연결하고 기본 스택 호출 샘플링을 수행 할 수있는 .NET 성능 프로파일 링 도구가 있습니까? 클라이언트의 IT 부서를 통해 많은 빨간 테이프를 가져와야하기 때문에 도구를 설치하지 않아도된다면 좋을 것입니다. .NET 프로덕션 코드 프로파일 링 도구

는 당신에게 성능 문제의


자연 감사합니다 성능 문제가 발생하는 Windows 서비스로 실행이 프로그램을하며 200 개 이상의 모바일 장치에서 소득 메시지를 처리합니다. 일반적으로이 프로그램은 초당 최소 10 개의 메시지를 처리 ​​할 수 ​​있습니다. 불행히도 최근 업그레이드 후,이 프로그램은 더 이상 일반적으로 오전 7 시경에 메시지를 더 이상 처리 할 수 ​​없습니다. 메시지가 들어오고 처리되기 전에 프로그램 내부 대기열에 10 분 이상있을 수 있습니다. 또한 프로그램이 정상 CPU보다 높은 CPU를 사용하고 있음을 알 수 있습니다. 일반적으로 8 코어 머신에서 5 %이어야하며 이제는 20-25 %입니다.

프로그램은 들어오는 메시지를 처리하는 것 이상의 기능을 수행하며 데이터베이스를 유지 관리하고 클라이언트에 데이터를 제공합니다. 5 개의 스레드가 들어오는 메시지를 처리하고 스레드상의 온 유지 관리 작업이 실행됩니다.

현재 해결 방법은 속도 저하가 발생할 때 서비스를 다시 시작하는 것입니다. 다시 시작하면 프로그램이 다시 정상적으로 실행됩니다 (CPU가 5 % 미만). 다음날 오전 7 시경까지, 그것은 일찍 일어날 것입니다. 큐를 다시 시작할 때마다 큐의 모든 메시지가 삭제되었습니다. 일반적으로 오전 7시와 오후 5시는 많은 메시지를 받았지만 문제는 오전 7시에만 발생합니다.

우리 팀은 시뮬레이션 된 메시지를 사용하여 집에서 프로그램을 재현하려고 시도했으며 코드 비교를 통해 심각한 병목 현상이 있는지 확인했습니다.

+0

사운드와 같은 문제는 메모리 누수와 관련 될 수 있습니다 (개체가 가비지 수집 될 수 없게되는 이벤트 핸들이 릴리스되지 않을 수 있음). DebugDiag와 같은 것을 테스트 메시지와 함께 집에서 실행하는 것을 추천하고 그런 종류의 누수가 있는지 살펴볼 것입니다. [이 링크] (http://viisual.net/tools/)에서 1.2 베타 버전을 다운로드 할 수 있습니다. NET 메모리 사용을위한 규칙이 있습니다. PDB 파일을 던져서 할당에 대한 줄 번호를 얻을 수 있습니다. – pstrjds

+0

제안 해 주셔서 감사합니다. 응용 프로그램이 시작된 이후로 메모리가 더 높다는 것을 알기 때문에 응용 프로그램은 일정 기간 동안 무언가를 축적하고 데이터를 삭제하지 않을 수 있습니다. 그러나 일반적인 CPU 사용량보다 높은 것을 직접적으로 설명하지는 않습니다. – dsum

+0

코드의 특성을 알지 못한다고 말할 수는 없지만 메모리 사용량으로 인해 페이징이 많이 발생하면 CPU 사용량이 올라갈 수 있습니다. 그렇지 않으면 코드에서 일종의 컬렉션을 반복하고 있습니다. 계속 증가 할 것으로 예상되지만 데이터가 들어올 때마다 더 큰 컬렉션을 반복해야합니다. 그러면 CPU 시간이 확실히 커질 수 있습니다. – pstrjds

답변

0

모든 제안을 주셔서 감사합니다.

많은 프로파일 링 도구를 사용해 보았지만 설치가 필요하고 비용이 많이 들었습니다.

"Windows Debug Tools"+ "Process Explorer"+ "Process Monitor"으로 시도하여 실행중인 스레드의 스택 추적에 대한 스냅 샷을 얻을 수 있는지 확인해보십시오. 불행하게도 우리 자신의 관리 기호 파일 (pdb)을 사용할 수 없습니다. 커널 API에 대한 모든 호출을 볼 수 있지만 내 자신의 코드는 볼 수 없습니다.

다행히도 우리 고객이 프로파일 러 설치를 승인했습니다. Visual Studio Premium 또는 Enterprise 버전을 사용하는 경우 stand alone profiler이 제공됩니다. 클라이언트 컴퓨터에서 프로필 보고서를 가져 와서 Visual Studio를 사용하여 보고서를 분석 할 수있었습니다.

+0

pdb-s의 위치를 ​​프로세스 탐색기 기호 경로 구성에 추가하면 스레드보기에 경로가 표시됩니다. – Ghita

1

최근에 Microsoft에서 획득 한 AVICode이 사용자의 요구를 충족시키는 지 확인하십시오. 이 제품은 프로덕션 환경에서의 응용 프로그램 성능 모니터링에 관한 것입니다. 필자는이 제품을 10 년 만에 보지 못했지만 이전에 살펴본 결과 최소한의 오버 헤드로 프로덕션 환경에서 실행되는 앱에서 예외 정보와 스택을 호출하는 기능을 강조했습니다. .NET 프로파일 링 API를 기반으로 구축되었으므로 CPU 사용률 시나리오에도 기능을 제공한다면 놀라지 않을 것입니다. 서버에 설치/활성화하는 데 필요한 세부 정보를 알지 못하므로 IT 부서의 장애물을 쉽게 지울 수 있는지 여부는 확실하지 않습니다.

애플리케이션 또는 구성을 변경하지 않고도 활성화 할 수있는 performance counters for the .NET Framework을 확인하십시오.

2

설치하지 않고 사용할 수있는 프로파일 러에 대해 알지 못하기 때문에 결국 클라이언트의 IT 부서와 어떤 합의를해야 할 수도 있습니다.

그러나 .NET 성능 카운터를 보면 통찰력을 얻을 수 있습니다. 아마도 서비스가 어떤 이유로 든 과도한 가비지 수집을하고있을 수도 있습니다.

아무런 단서가없는 경우 SysInternals의 Process Explorer를 사용할 수 있습니다. 사전 설치없이 실행할 수 있습니다. 속성 창에는 프로세스의 모든 스레드와 실행 시간이 표시되는 스레드가 있으며 이는 도움이 될 수 있습니다.