할당 프로파일러 도구를 사용하면 적절하게 가비지 컬렉션되지 않은 객체를 찾고 계속해서 메모리를 유지할 수 있습니다.
목표 이전 도구의 작동 방식
할당 프로파일러는 힙 프로파일러의 자세한 스냅샷 정보를 타임라인 패널의 증분 업데이트 및 추적과 결합합니다. 이러한 도구와 마찬가지로 객체의 힙 할당 추적에는 기록을 시작하고 일련의 작업을 실행한 다음 분석을 위한 기록을 중지하는 작업이 포함됩니다.
이 도구는 기록 기간 동안 힙 스냅샷을 주기적으로 (50ms마다 한 번씩) 촬영하고 기록 종료 시 최종 스냅샷을 하나씩 촬영합니다.
할당 프로파일러 사용 설정
할당 프로파일러 사용을 시작하려면 다음 단계를 따르세요.
- 최신 Chrome Canary를 사용하고 있는지 확인합니다.
- 개발자 도구를 열고 오른쪽 하단에 있는 톱니바퀴 아이콘을 클릭합니다.
- 이제 Profiler 패널을 열면 'Record Heap Allocations'라는 프로필이 표시됩니다.
힙 할당 프로필 읽기
힙 할당 프로필은 객체가 생성되고 있는 위치를 표시하고 유지 경로를 식별합니다. 아래 스냅샷에서 맨 위의 막대는 힙에서 새 객체가 발견된 시점을 나타냅니다.
각 막대의 높이는 최근에 할당된 객체의 크기에 해당하며, 막대의 색상은 이러한 객체가 최종 힙 스냅샷에 아직 있는지 여부를 나타냅니다. 파란색 막대는 타임라인 종료 시점에 여전히 활성 상태인 객체를 나타내고, 회색 막대는 타임라인 동안 할당되었지만 그 이후 가비지로 수집된 객체를 나타냅니다.
아래 스냅샷에서는 작업이 10회 수행되었습니다. 샘플 프로그램은 객체 5개를 캐시하므로 마지막 파란색 막대 5개가 필요합니다. 하지만 가장 왼쪽의 파란색 막대는 잠재적인 문제를 나타냅니다.
그런 다음 위 타임라인의 슬라이더를 사용하여 특정 스냅샷을 확대하고 해당 시점에 최근 할당된 객체를 확인할 수 있습니다.
힙에서 특정 객체를 클릭하면 힙 스냅샷의 하단 부분에 보존 트리가 표시됩니다. 객체의 보존 경로를 검사하면 객체가 수집되지 않은 이유를 이해하는 데 충분한 정보를 얻을 수 있으며 필요한 코드를 변경하여 불필요한 참조를 삭제할 수 있습니다.
함수별 메모리 할당 보기
JavaScript 함수별로 메모리 할당을 볼 수도 있습니다. 자세한 내용은 함수별 메모리 할당 조사를 참고하세요.