티스토리 뷰

Swift&iOS/iOS

[iOS] Instruments

lsh424 2021. 9. 10. 10:30

오늘은 Instruments를 알아보려고 합니다. 

Instruments는 성능 분석 및 테스팅 도구로 앱의 성능을 신경 쓴다면 반드시 알아야 할 도구입니다. 

Instruments를 사용하면 CPU분석 메모리 분석을 포함해 여러 가지 분석을 할 수 있고 분석을 통해 성능을 개선시킬 수 있습니다.

오늘 모든 분석을 다 살펴보진 않고 Activity Monitor, Time Profiler, Allocations, Leaks 이렇게 네 가지만 살펴보겠습니다. 

Instruments를 사용하려면 Product > Profile을 누르시면 됩니다.

Instruments가 실행된 후 통계를 기록하기 위해서는 아래와 같이 빨간색 레코드 버튼을 누르셔야 합니다.

(모든 분석의 경우 트래킹을 중지하고 Instruments 종료하면 해당 분석을 저장할 거냐고 묻는데, 만약 다른 트래킹과 비교를 할 거라면 저장을 하고 그렇지 않으면 Don't Save 하시면 됩니다.)

 

 

1. Activity monitor

Activity monitor를 실행시키면 다음과 같이 CPU, Memory, Disk, Network 중 하나를 선택할 수 있고 관련 통계를 모니터링(분석) 할 수 있습니다. 

 

 

그리고 그 옆을 보면 CPU Total Load를 볼 수 있고 현재 CPU를 얼마나 사용하고 있는지 시각적으로 확인 할 수 있습니다.  

 

하단을 보시면 현재 iOS에서 어떤 프로세스들이 cpu를 할당받아 실행중인지 또 프로세스 내에서 몇 개의 스레드가 동작하고 있는지 확인 가능합니다.  (시뮬레이터일 경우 mac os) 

만약 현재 실행중인 앱에 대해서만 정보를 알고 싶다면 맨 하단의 Detail Filter 부분에 현재 실행 중인 앱의 이름을 입력하면 됩니다. 그럼 다음과 같이 현재 앱에 대해서만 CPU 사용량, CPU Time, Threads 개수 등을 파악할 수 있습니다. 

 

2. Time Profiler

Time Profiler를 사용하면 어떤 작업이 처리에 오래 걸리는지, 현재 cpu 사용량에서 각각의 thread가 점유하는 정도 등을 알아볼 수 있습니다.

다음과 같이 상단의 CPU Usage와 Thermal State를 통해 CPU 사용량과 현재 온도 상태 등을 알 수 있고

하단의 정보를 통해 현재 어떤 스레드가 얼마나 cpu리소스를 잡아먹고 있는지 확인할 수 있습니다.

(만약 system library 관련된 처리는 숨기고 싶다면 하단의 Call Tree 버튼을 눌러 Hide System Library 체크를 하시면 됩니다.)

위 정보를 보면 메인스레드가 가장 많은 사용량을 차지하는 걸 볼 수 있네요.

이외에도 여러개의 스레드 중 특정 스레드를 클릭해서 들어가 보면 스레드가 처리하는 코드가 있는 곳으로 이동할 수 있고, 어떤 명령어를 처리하는데 얼마만큼의 리소스를 사용하는지 퍼센트로 확인할 수 있습니다. 

 

3. Allocations

Allocations는 프로그램에서 현재 얼마나 많은 메모리가 할당되어 사용되고 있는지 확인할 수 있습니다.

다음과 같이 이미지 메모리 캐싱을 하게 되면 아래와 같이 메모리 사용량이 계단식으로 증가하는 것을 볼 수 있습니다.

 

하단의 Allocation Summary를 통해서는 메모리 할당에 대한 상세 정보를 얻을 수 있습니다.

 

4. Leaks

Leaks는 메모리 누수를 확인하는 용도로 사용합니다. 

상단을 확인해 보면 다음과 같이 Allocations와 Leaks를 볼 수 있는데 

참고) 빨간색  X 마크는 이렇게 생겼습니다

Leaks에서 초록색 체크 마크는 메모리 누수가 없음을 뜻하고 빨간색 X 마크는 메모리 누수가 있음을 뜻합니다.

빨간 x를 눌러보면 어떤 누수가 일어나고 있는지 구체적으로 확인 가능합니다. 

이외에도 Leaks에서는 Cycles & Roots를 통해 순환 참조 발생 유무를 확인 할 수 있습니다.

참고로 앱에대한 간단한 분석은 앱 실행 후 XCode 좌측의 Debug Navigator를 사용할 수도 있으니 알아두시면 좋을것 같습니다. 

댓글
링크
최근에 올라온 글
최근에 달린 댓글