성능 모니터를 사용하여 NI 소프트웨어 메모리 사용 추적

업데이트 됨 Aug 3, 2023

환경

소프트웨어

  • TestStand
  • LabVIEW

운영 체제

  • Windows

성능 모니터를 사용하여 시스템 및 프로세스 정보를 추적하고 기록하려면 어떻게합니까?

성능 모니터 (PerfMon)는 특정 프로세스에 대한 성능 메트릭을 그래프로 작성하고 기록 할 수있는 Windows 모니터링 도구입니다. 이 도구를 고유 한 테스트 케이스와 함께 사용하여 메모리 증가를 유발하는 시스템의 구성 요소를 격리하십시오. 작업 관리자와 달리 성능 모니터는 메모리 사용량을 정기적으로 측정하므로 메모리 증가가 분명해지기 전에 테스트 시스템을 장기간 실행해야하는 경우 유용합니다.

이 튜토리얼은 성능 모니터를 사용하여 TestStand 프로세스의 메모리 사용량을 측정하고,이 정보를 그래프에 표시하고, 데이터를 로그 파일에 저장하는 방법을 보여줍니다.
  1. 시작 메뉴에서 성능 모니터를 시작합니다.
  2. 메모리 사용량 그래프를 보려면 구성 트리에서 성능 모니터 를 클릭하십시오.
성능 모니터는 카운터 값을 그래프로 표시하여 정보를 표시합니다. 카운터는 메모리 사용량 및 시스템 성능의 다양한 측면을 나타냅니다. 성능 모니터 그래프에 표시되는 카운터 집합을 구성 할 수 있습니다.
  1. 성능 모니터 창 아래쪽에있는 표에서 기존 카운터를 선택합니다.
  2. 그래프 디스플레이에서 이러한 카운터를 제거하려면 키보드에서 Delete 키를 누릅니다.
  3. 그래프 영역을 마우스 오른쪽 버튼으로 클릭합니다. 카운터 추가…를 클릭합니다 .
카운터 추가 대화 상자가 나타납니다. 그룹별로 분류 된 사용 가능한 모든 카운터가있는 스크롤 가능한 목록 상자가 있습니다.



6. 관심있는 그룹을 찾아 확장하고 카운터를 선택합니다.

메모리 증가 문제의 경우 Private Bytes, Handle Count, Thread Count, #Bytes in all HeapsGen2 힙 크기 카운터를 사용하는 것이 유용한 경우가 많습니다. 이러한 모든 메트릭은 현재 애플리케이션에서 사용하는 리소스의 스냅 샷입니다. 다음 표는 각 카운터의 의미를 설명합니다.
참고 : 테이블에 포함되지 않은 다른 카운터의 경우 설명 표시를 활성화하여 카운터에 대한 설명 을 봅니다.
그룹카운터기술
방법개인 바이트프로세스에서 사용중인 개인 메모리의 양입니다. 프로세스의 가상 메모리 공간은 프로세스에서만 액세스 할 수있는 개인 메모리와 다른 프로세스에서 액세스 할 수있는 공유 메모리로 구성됩니다.
방법핸들 수프로세스의 개체 테이블에있는 개체 핸들 수입니다. 인스트루먼트 드라이버 세션에 대한 참조를 유지하고, LabVIEW VI를로드하고, 기타 많은 작업을 수행하면 핸들 수가 증가 할 수 있습니다.
방법스레드 수프로세스에서 실행중인 스레드 수입니다.
.NET CLR 메모리# 모든 힙의 바이트.NET 개체를 저장하기 위해 프로세스에서 사용중인 총 메모리 양입니다.
.NET CLR 메모리Gen 2 힙 크기Gen 2 힙에 .NET 개체를 저장하기 위해 프로세스에서 사용하는 메모리 양입니다. Gen 2 힙은 오랫동안 메모리에 있었던 개체가 저장되는 .NET 메모리 영역입니다. 이 값은 .NET 개체가 더 이상 필요하지 않을 때 해제되지 않음을 나타낼 수 있습니다.
  1. 선택한 개체인스턴스 목록에서 원하는 프로세스를 선택합니다 .
TestStand 시스템의 경우 TestStand Sequence Editor 또는 사용자 인터페이스에서 테스트 시스템을 실행하는지 여부에 따라 일반적으로 SeqEdit 또는 사용자 인터페이스 실행 파일의 이름입니다.
LabVIEW 어플리케이션의 경우, LabVIEW를 선택합니다.
  1. 추가 버튼을 클릭하여 카운터를 추가 된 카운터 목록에 추가합니다 .
  2. 추가 된 카운터 목록에 원하는 카운터가 모두 표시 될 때까지 6-8 단계를 반복합니다.
  1. 카운터 추가 대화 상자에서 확인 을 클릭하십시오. 성능 모니터 그래프가 새로 추가 된 카운터의 값으로 업데이트되기 시작합니다.


성능 모니터 그래프 구성

모든 카운터 값이 그래프 표시에 맞게 적절하게 조정되고 그래프에 메모리 사용량이 증가하는지 여부를 확인할 수있는 충분한 시간의 데이터가 표시되도록 그래프 설정을 조정해야 할 수 있습니다. 시스템이 실행됩니다.
  1. Ctrl + Shift + A 를 눌러 창 하단의 표에 표시된 모든 카운터를 선택합니다.
  2. 마우스 오른쪽 버튼을 클릭하고 선택한 카운터 축척을 선택 합니다. 그러면 그래프 창에 카운터가 표시되도록 각 카운터의 값이 조정됩니다.
  3. 그래프를 마우스 오른쪽 단추로 클릭하고 속성…을 선택합니다. 성능 모니터 속성 대화 상자가 나타납니다.
  4. General 탭에서 Sample every 값과 Duration 값을 설정하여 그래프가 장기간에 걸친 메모리 증가를 표시하도록합니다.
예를 들어 샘플 간격 값을 10으로 설정하고 기간 값을 10000으로 설정하여 10 초마다 새 값을 그래프로 표시하고 그래프 창에 총 약 2.5 시간의 정보를 표시 할 수 있습니다.
  1. 확인을 클릭 합니다.
  2. 그래프 영역을 마우스 오른쪽 버튼으로 클릭하고 지우기를 선택 합니다 . 이렇게하면 테스트 케이스를 실행하기 전에 기존 그래프 데이터가 제거됩니다.
  3. 테스트 케이스를 실행하십시오. 성능 모니터 그래프를 검사하여 테스트 시스템이 실행될 때 카운터 값이 증가하는지 확인합니다.


파일에 메모리 데이터 기록

  1. 구성 트리에서 성능 모니터 를 마우스 오른쪽 버튼으로 클릭합니다. New»Data Collector Set를 선택 합니다.
  1. 데이터 세트의 이름을 입력하십시오. 다음을 누릅니다 .
  1. 로그 파일을 저장할 위치를 선택하십시오. 다음을 클릭합니다.
  2. 저장 후 닫기를 선택 합니다 . 마침을 클릭 합니다 .
새 데이터 수집기 집합이 데이터 수집기 집합 >> 사용자 정의 아래의 구성 트리에 나타납니다.


성능 데이터 로깅을 시작하려면 데이터 수집기 집합을 마우스 오른쪽 단추로 클릭하고 시작을 선택합니다. 로깅을 중지하려면 마우스 오른쪽 버튼을 클릭하고 중지를 선택합니다.



다음은 테스트 케이스를 실행 한 후 성능 모니터 그래프의 예입니다.



Private Bytes 카운터 (파란색 선)는 일정한 속도로 증가하지만 모든 힙Gen 2 힙 크기 카운터# 바이트는 그렇지 않습니다. 이는 시퀀스 편집기 프로세스의 메모리 공간이 시간이 지남에 따라 증가하고 있음을 나타내며, 이는 메모리 누수가 발생할 수 있음을 나타냅니다. 모든 힙Gen 2 힙 크기 카운터의 # Bytes는 시간이 지남에 따라 증가하지 않으므로 메모리 증가는 .NET 메모리로 인한 것으로 보이지 않습니다. 이러한 카운터가 증가하면 프로세스가 .NET 참조를 계속 열고 더 이상 필요하지 않은 참조를 닫지 않음을 나타냅니다.

Gen 2 힙 크기 및 .NET 가비지 수집의 중요성에 대한 자세한 내용은 External : Fundamentals of Garbage Collection을 참조하십시오.