성능 모니터 (PerfMon)는 특정 프로세스에 대한 성능 메트릭을 그래프로 작성하고 기록 할 수있는 Windows 모니터링 도구입니다. 이 도구를 고유 한 테스트 케이스와 함께 사용하여 메모리 증가를 유발하는 시스템의 구성 요소를 격리하십시오. 작업 관리자와 달리 성능 모니터는 메모리 사용량을 정기적으로 측정하므로 메모리 증가가 분명해지기 전에 테스트 시스템을 장기간 실행해야하는 경우 유용합니다.
이 튜토리얼은 성능 모니터를 사용하여 TestStand 프로세스의 메모리 사용량을 측정하고,이 정보를 그래프에 표시하고, 데이터를 로그 파일에 저장하는 방법을 보여줍니다.
- 시작 메뉴에서 성능 모니터를 시작합니다.
- 메모리 사용량 그래프를 보려면 구성 트리에서 성능 모니터 를 클릭하십시오.
성능 모니터는 카운터 값을 그래프로 표시하여 정보를 표시합니다. 카운터는 메모리 사용량 및 시스템 성능의 다양한 측면을 나타냅니다. 성능 모니터 그래프에 표시되는 카운터 집합을 구성 할 수 있습니다.
- 성능 모니터 창 아래쪽에있는 표에서 기존 카운터를 선택합니다.
- 그래프 디스플레이에서 이러한 카운터를 제거하려면 키보드에서 Delete 키를 누릅니다.
- 그래프 영역을 마우스 오른쪽 버튼으로 클릭합니다. 카운터 추가…를 클릭합니다 .
카운터 추가 대화 상자가 나타납니다. 그룹별로 분류 된 사용 가능한 모든 카운터가있는 스크롤 가능한 목록 상자가 있습니다.
6. 관심있는 그룹을 찾아 확장하고 카운터를 선택합니다.
메모리 증가 문제의 경우
Private Bytes, Handle Count, Thread Count, #Bytes in all Heaps 및
Gen2 힙 크기 카운터를 사용하는 것이 유용한 경우가 많습니다. 이러한 모든 메트릭은 현재 애플리케이션에서 사용하는 리소스의 스냅 샷입니다. 다음 표는 각 카운터의 의미를 설명합니다.
참고 : 테이블에 포함되지 않은 다른 카운터의 경우
설명 표시를 활성화하여 카운터에 대한
설명 을 봅니다.
그룹 | 카운터 | 기술 |
---|
방법 | 개인 바이트 | 프로세스에서 사용중인 개인 메모리의 양입니다. 프로세스의 가상 메모리 공간은 프로세스에서만 액세스 할 수있는 개인 메모리와 다른 프로세스에서 액세스 할 수있는 공유 메모리로 구성됩니다. |
방법 | 핸들 수 | 프로세스의 개체 테이블에있는 개체 핸들 수입니다. 인스트루먼트 드라이버 세션에 대한 참조를 유지하고, LabVIEW VI를로드하고, 기타 많은 작업을 수행하면 핸들 수가 증가 할 수 있습니다. |
방법 | 스레드 수 | 프로세스에서 실행중인 스레드 수입니다. |
.NET CLR 메모리 | # 모든 힙의 바이트 | .NET 개체를 저장하기 위해 프로세스에서 사용중인 총 메모리 양입니다. |
.NET CLR 메모리 | Gen 2 힙 크기 | Gen 2 힙에 .NET 개체를 저장하기 위해 프로세스에서 사용하는 메모리 양입니다. Gen 2 힙은 오랫동안 메모리에 있었던 개체가 저장되는 .NET 메모리 영역입니다. 이 값은 .NET 개체가 더 이상 필요하지 않을 때 해제되지 않음을 나타낼 수 있습니다. |
- 선택한 개체 의 인스턴스 목록에서 원하는 프로세스를 선택합니다 .
TestStand 시스템의 경우 TestStand Sequence Editor 또는 사용자 인터페이스에서 테스트 시스템을 실행하는지 여부에 따라 일반적으로
SeqEdit 또는 사용자 인터페이스 실행 파일의 이름입니다.
LabVIEW 어플리케이션의 경우,
LabVIEW를 선택합니다.
- 추가 버튼을 클릭하여 카운터를 추가 된 카운터 목록에 추가합니다 .
- 추가 된 카운터 목록에 원하는 카운터가 모두 표시 될 때까지 6-8 단계를 반복합니다.
- 카운터 추가 대화 상자에서 확인 을 클릭하십시오. 성능 모니터 그래프가 새로 추가 된 카운터의 값으로 업데이트되기 시작합니다.
성능 모니터 그래프 구성
모든 카운터 값이 그래프 표시에 맞게 적절하게 조정되고 그래프에 메모리 사용량이 증가하는지 여부를 확인할 수있는 충분한 시간의 데이터가 표시되도록 그래프 설정을 조정해야 할 수 있습니다. 시스템이 실행됩니다.
- Ctrl + Shift + A 를 눌러 창 하단의 표에 표시된 모든 카운터를 선택합니다.
- 마우스 오른쪽 버튼을 클릭하고 선택한 카운터 축척을 선택 합니다. 그러면 그래프 창에 카운터가 표시되도록 각 카운터의 값이 조정됩니다.
- 그래프를 마우스 오른쪽 단추로 클릭하고 속성…을 선택합니다. 성능 모니터 속성 대화 상자가 나타납니다.
- General 탭에서 Sample every 값과 Duration 값을 설정하여 그래프가 장기간에 걸친 메모리 증가를 표시하도록합니다.
예를 들어
샘플 간격 값을 10으로 설정하고
기간 값을 10000으로 설정하여 10 초마다 새 값을 그래프로 표시하고 그래프 창에 총 약 2.5 시간의 정보를 표시 할 수 있습니다.
- 확인을 클릭 합니다.
- 그래프 영역을 마우스 오른쪽 버튼으로 클릭하고 지우기를 선택 합니다 . 이렇게하면 테스트 케이스를 실행하기 전에 기존 그래프 데이터가 제거됩니다.
- 테스트 케이스를 실행하십시오. 성능 모니터 그래프를 검사하여 테스트 시스템이 실행될 때 카운터 값이 증가하는지 확인합니다.
파일에 메모리 데이터 기록
- 구성 트리에서 성능 모니터 를 마우스 오른쪽 버튼으로 클릭합니다. New»Data Collector Set를 선택 합니다.
- 데이터 세트의 이름을 입력하십시오. 다음을 누릅니다 .
- 로그 파일을 저장할 위치를 선택하십시오. 다음을 클릭합니다.
- 저장 후 닫기를 선택 합니다 . 마침을 클릭 합니다 .
새 데이터 수집기 집합이
데이터 수집기 집합 >> 사용자 정의 아래의 구성 트리에 나타납니다.
성능 데이터 로깅을 시작하려면 데이터 수집기 집합을 마우스 오른쪽 단추로 클릭하고
시작을 선택합니다. 로깅을 중지하려면 마우스 오른쪽 버튼을 클릭하고
중지를 선택합니다.
예
다음은 테스트 케이스를 실행 한 후 성능 모니터 그래프의 예입니다.
Private Bytes 카운터 (파란색 선)는 일정한 속도로 증가하지만
모든 힙 및
Gen 2 힙 크기 카운터 의
# 바이트는 그렇지 않습니다. 이는 시퀀스 편집기 프로세스의 메모리 공간이 시간이 지남에 따라 증가하고 있음을 나타내며, 이는 메모리 누수가 발생할 수 있음을 나타냅니다.
모든 힙 및
Gen 2 힙 크기 카운터의
# Bytes는 시간이 지남에 따라 증가하지 않으므로 메모리 증가는 .NET 메모리로 인한 것으로 보이지 않습니다. 이러한 카운터가 증가하면 프로세스가 .NET 참조를 계속 열고 더 이상 필요하지 않은 참조를 닫지 않음을 나타냅니다.
Gen 2 힙 크기 및 .NET 가비지 수집의 중요성에 대한 자세한 내용은
External : Fundamentals of Garbage Collection을 참조하십시오.