유니티

유니티 - 프로파일링을 해보자 #2 Memory 프로파일러

근본넘치는개발자 2024. 12. 5. 23:58

 

2024.12.04 - [유니티] - 유니티 - 프로파일링을 해보자 #1 Unity 프로파일러

 

지난 시간에 이어 오늘은 Memory 프로파일러 사용법을 정리하고자 합니다.

 

메모리 관리는 왜 해야 할까?

기기마다 메모리 성능의 차이가 있습니다.

 

모바일은 PC와 달리 물리적 메모리만 사용 가능하며

디스크를 통한 가상 메모리 확장이 불가능합니다.

이는 OS가 메모리 관리를 엄격히 수행하며,

과다 사용 시 강제 종료되는 상황이 발생할 수도 있다고 합니다.

 

다른 예로 Xbox One 본체는

포그라운드에서 실행되는 게임에 사용할 수 있는 최대 메모리가 5GB로 제한된다고 합니다.

 

따라서 게임을 개발함에 있어서

타깃 기기에 알맞은 메모리 관리가 필요합니다.

Memory Profiler 

Unity Profiler에서도 Memory 사용량에 대해 대략 파악이 가능하지만

Memory Profiler는 여기에서 추가로

임의 특정 시점에서 메모리 사용량을 캡처하고 상세한 통계 분석을 제공합니다.

(실시간이 아니라는 뜻)

사용법 

Memory Profiler를 사용하기 위해선 

Package Manager를 통해 Memory Profiler를 추가해야 합니다.

 

추가하고 나면 Unity Profiler 때와 같이

Analysis로 들어가 Memory Profiler를 누르면 됩니다.

 

보시는 바와 같이 이전에는 없던 Memory Profiler 기능이 생겼습니다.

 

Capture New SnapShot을 눌러 캡처를 하실 수 있습니다. 

이때 경고 문구가 뜰 텐데 TakeShot을 눌러 진행하시면 됩니다. 

 

경고 문구 내용을 요약하자면 캡처 내용에는

Editor에서 관리되는 모든 정보가 뜨니 캡처한 내용을 공유할 때 주의하라는 내용입니다.

 

 

 

이전에 만들었던 프로젝트에서 캡처한 내용을 가져왔습니다.

 

스크린샷의 오른쪽 아래를 자세히 보시면 어느 플랫폼에서 찍었는지 표시가 있습니다.

컴퓨터 아이콘을 보실 수 있을 겁니다.

좌 : Single SnapShot / 우 : Compare Snap Shot

 

 

Editor라고 적힌 부분을 눌러

연동한 플랫폼으로 변경, 캡처해 해당 플랫폼 상황에 맞는 분석도 가능합니다.

 

 

문서를 확인해 보니 Editor 환경에서 캡처를 진행하면 

에디터 및 기타 툴에 의해 추가된 오버헤드로 인해 부정확한 수치를 얻을 수 있기에

타깃 기기에 맞는 캡처를 진행하기를 권장하고 있더군요.

 

더보기

Unity 에디터는 일반적으로 에디터와 프로파일러에서 로드되는

추가 오브젝트로 인해 항상 더 큰 메모리 공간을 표시합니다.

 

어드레서블 시뮬레이션 모드에 따라 에셋 번들(Asset Bundles)

또는 스프라이트(Sprites) 및 아틀라스(Atlases) 또는 인스펙터에 표시된 에셋(Asset)과 같이

빌드에서 메모리에 로드되지 않는 에셋 메모리(Asset Memory)가 표시될 수도 있습니다.

 

스크롤을 아래로 내리면 

Managed Heap Utilization가 나오는데

이 부분에서는 프로젝트 코드와 관련된 메모리 분석을 제공합니다.

 

Managed Heap은 가비지 컬렉터가 관리하는 메모리 공간이고,

Virtual Machine 공간은 Mono나 IL2CPP가 동작할 때 사용되는 메모리 공간입니다.

(유니티 내부 코드는 C++로 되어 있어서 C#을 C++로 변환하는 과정이 IL2CPP입니다)

 

 

더 내리면 

Objects Categories라고

가장 많이 메모리를 사용하는 부분이 무엇인지 순위를 매겨 한눈에 정리하여 보여줍니다.

 

참고 영상에서 UI나 스프라이트보다

렌더 텍스처가 메모리 사용량의 주요 원인이라고 설명하시던데

실제로 확인해 보니 신기하네요.

 

 

원하는 대상이 얼마나 메모리를 사용하고 있는지 등

메모리 사용에 관한 더 자세한 정보를 보고 싶으시다면

 

각 메뉴? 우측에서 Inspect를 누르거나,

상단 탭의 UnityObjects를 통해서 다음과 같이 확인하실 수 있습니다.

 

 

 

참고 영상을 보시면 모바일과 연동해서 직접 동작 시연을 보여주고 있습니다.

이 부분은 꼭 한번 보시면 좋을 것 같네요

 

최신 버전(글 작성 기준 / 2024.12.05)에서는 

TreeMap기능이나 Memory Breakdowns이 사라지고 위에 설명한 기능이 전부입니다.

 

마무리 

오늘은 Memory Profiler에 대해서 간단하게 사용해 보고 정리해 봤습니다.

지금까지의 글 내용을 따라오셨다면 아마 프로파일링을 하는 방법이

제가 소개한 것 외에도 다양하다는 걸 아셨을 겁니다.

(Analysis만 봐도..)

 

저는 일단 Unity Profiler랑 Memory Profiler 이 두개가

가장 대표적으로 사용되는 듯 하여 정리해봤습니다.


기회가 된다면 추후 다른 프로파일링 도구들도 사용해 보고 정리해 보겠습니다. 

 

참고한 자료 

 

https://youtu.be/rdspAfOFRJI?si=uqkgmHPdJsK2Ft0f

https://www.youtube.com/watch?v=Uuzd39AjFWQ

 

https://unity.com/kr/blog/engine-platform/everything-you-need-to-know-about-memory-profiler

 

Memory Profiler 1.0.0에 관한 모든 것

프로파일링 제품군을 개선하고, 메모리 사용량에 대한 더 완전한 뷰를 제공하며, 더 쉽게 성능을 최적화하거나 메모리 문제를 감지할 수 있는 새로운 Memory Profiler 1.0.0을 살펴봅니다.

unity.com

 

 

https://unity.com/kr/how-to/use-memory-profiling-unity

 

Unity 메모리 프로파일링 툴 사용 방법 | Unity

Unity 프로젝트의 프로필 메모리 사용 툴을 사용하여 하드웨어 플랫폼 메모리 제한에 대해 테스트하여 게임 성능을 최적화하는 방법을 알아봅니다.

unity.com

 

https://unitysquare.co.kr/growwith/unityblog/webinarView?id=387&utm_source=facebook-page&utm_medium=social&utm_campaign=korea_memoryprofilerapp387

 

Unity Square

Memory Profiler로 애플리케이션의 물리적 메모리 사용량 분석

unitysquare.co.kr