실행중인 Windows 서비스에 연결하고 기본 스택 호출 샘플링을 수행 할 수있는 .NET 성능 프로파일 링 도구가 있습니까? 클라이언트의 IT 부서를 통해 많은 빨간 테이프를 가져와야하기 때문에 도구를 설치하지 않아도된다면 좋을 것입니다. .NET 프로덕션 코드 프로파일 링 도구
는 당신에게 성능 문제의자연 감사합니다 성능 문제가 발생하는 Windows 서비스로 실행이 프로그램을하며 200 개 이상의 모바일 장치에서 소득 메시지를 처리합니다. 일반적으로이 프로그램은 초당 최소 10 개의 메시지를 처리 할 수 있습니다. 불행히도 최근 업그레이드 후,이 프로그램은 더 이상 일반적으로 오전 7 시경에 메시지를 더 이상 처리 할 수 없습니다. 메시지가 들어오고 처리되기 전에 프로그램 내부 대기열에 10 분 이상있을 수 있습니다. 또한 프로그램이 정상 CPU보다 높은 CPU를 사용하고 있음을 알 수 있습니다. 일반적으로 8 코어 머신에서 5 %이어야하며 이제는 20-25 %입니다.
프로그램은 들어오는 메시지를 처리하는 것 이상의 기능을 수행하며 데이터베이스를 유지 관리하고 클라이언트에 데이터를 제공합니다. 5 개의 스레드가 들어오는 메시지를 처리하고 스레드상의 온 유지 관리 작업이 실행됩니다.
현재 해결 방법은 속도 저하가 발생할 때 서비스를 다시 시작하는 것입니다. 다시 시작하면 프로그램이 다시 정상적으로 실행됩니다 (CPU가 5 % 미만). 다음날 오전 7 시경까지, 그것은 일찍 일어날 것입니다. 큐를 다시 시작할 때마다 큐의 모든 메시지가 삭제되었습니다. 일반적으로 오전 7시와 오후 5시는 많은 메시지를 받았지만 문제는 오전 7시에만 발생합니다.
우리 팀은 시뮬레이션 된 메시지를 사용하여 집에서 프로그램을 재현하려고 시도했으며 코드 비교를 통해 심각한 병목 현상이 있는지 확인했습니다.
사운드와 같은 문제는 메모리 누수와 관련 될 수 있습니다 (개체가 가비지 수집 될 수 없게되는 이벤트 핸들이 릴리스되지 않을 수 있음). DebugDiag와 같은 것을 테스트 메시지와 함께 집에서 실행하는 것을 추천하고 그런 종류의 누수가 있는지 살펴볼 것입니다. [이 링크] (http://viisual.net/tools/)에서 1.2 베타 버전을 다운로드 할 수 있습니다. NET 메모리 사용을위한 규칙이 있습니다. PDB 파일을 던져서 할당에 대한 줄 번호를 얻을 수 있습니다. – pstrjds
제안 해 주셔서 감사합니다. 응용 프로그램이 시작된 이후로 메모리가 더 높다는 것을 알기 때문에 응용 프로그램은 일정 기간 동안 무언가를 축적하고 데이터를 삭제하지 않을 수 있습니다. 그러나 일반적인 CPU 사용량보다 높은 것을 직접적으로 설명하지는 않습니다. – dsum
코드의 특성을 알지 못한다고 말할 수는 없지만 메모리 사용량으로 인해 페이징이 많이 발생하면 CPU 사용량이 올라갈 수 있습니다. 그렇지 않으면 코드에서 일종의 컬렉션을 반복하고 있습니다. 계속 증가 할 것으로 예상되지만 데이터가 들어올 때마다 더 큰 컬렉션을 반복해야합니다. 그러면 CPU 시간이 확실히 커질 수 있습니다. – pstrjds