할당 프로파일러 도구 사용법

할당 프로파일러 도구를 사용하면 적절하게 가비지 수집되지 않은 객체를 찾아내고 계속해서 메모리 공간을 유지할 수 있습니다.

이 도구의 작동 원리

할당 프로파일러힙 프로파일러의 상세 스냅샷 정보를 Timeline 패널의 증분식 업데이트 및 추적 기능과 조합한 것입니다. 이들 도구와 마찬가지로, 객체의 힙 할당을 추적하는 과정에는 기록을 시작하고 일련의 작업을 수행한 다음, 분석을 위해 기록을 멈추는 과정이 포함됩니다.

이 도구는 기록 과정 내내 정기적으로 힙 스냅샷을 촬영하며(매 50ms마다 촬영!) 기록이 종료될 때 마지막으로 최종 스냅샷을 하나 촬영합니다.

할당 프로파일러

참고: @ 뒤에 있는 숫자는 객체 ID로, 여러 장의 스냅샷 촬영 시 계속 유지됩니다. 이 덕분에 힙 상태를 정밀하게 비교할 수 있습니다. 객체는 가비지 수집 중 이동되기 때문에 객체의 주소를 표시하는 것은 이치에 닿지 않습니다.

할당 프로파일러 활성화

할당 프로파일러 사용을 시작하는 방법은 다음과 같습니다.

  1. 최신 버전 Chrome Canary가 설치되어 있어야 합니다.
  2. 개발자 도구를 열어 아래 오른쪽에 위치한 기어 아이콘을 클릭합니다.
  3. 이제 Profiler 패널을 열면 'Record Heap Allocations'라는 프로필을 볼 수 있습니다.

Record heap allocations 프로파일러

힙 할당 프로필 읽기

힙 할당 프로필는 객체가 생성되는 위치를 표시하며 보관 경로를 식별합니다. 아래 스냅샷에서 맨 위의 표시줄은 새 객체가 힙의 어디에서 발견되는지를 알려줍니다.

각 막대의 높이는 최근 할당된 객체의 크기에 해당하며, 막대의 색을 보면 그러한 객체가 최종 힙 스냅샷에서 아직도 활성 상태인지 여부를 알 수 있습니다. 파란색 막대는 타임라인 종료 시에도 객체가 여전히 활성 상태임을 나타내며, 회색 막대는 타임라인 중간에 객체가 할당되었으나 이후에 가비지 수집되었음을 나타냅니다.

할당 프로파일러 스냅샷

위의 스냅샷에서는 한 가지 작업이 10회 수행되었습니다. 샘플 프로그램이 객체를 다섯 개 캐시하므로 마지막 다섯 개의 파란색 막대를 예상할 수 있습니다. 하지만 맨 왼쪽의 파란색 막대는 문제가 발생할 가능성을 나타냅니다.

그러면 위의 타임라인에 있는 슬라이더를 사용하여 특정 스냅샷을 확대한 다음, 그 시점에 최근 할당된 객체들을 확인할 수 있습니다.

스냅샷 확대

힙에서 특정 객체를 클릭하면 힙 스냅샷 하단 부분에 해당 객체의 보존 트리가 표시됩니다. 객체에 대한 보존 경로를 검사해보면 객체가 수집되지 않은 이유를 이해할 수 있을 정도로 충분한 정보를 확보할 수 있으며, 따라서 필요한 경우 코드를 변경하여 불필요한 참조를 제거할 수 있습니다.

함수별 메모리 할당 보기

또한 자바스크립트 함수별로 메모리 할당을 볼 수 있습니다. 자세한 내용은 함수별 메모리 할당 조사를 참조하세요.