SlideShare a Scribd company logo
1 of 118
Download to read offline
모바일 앱 성능분석 방법
(안드로이드/ 실 사례 중심으로)
ONYCOM 손영수
• 8
• 0 (
• 0 8 .
• 0 ) 8
#
.
.
( ) )
() ()# 0 1 .
기본 제약들 서버 모바일
상시 전원 공급 ● X
CPU / GPU 쿨러 (발열 방지) ● X
앱이 돌아가는 환경 단일 OS/ 디바이스 파편화
OS 버전 업데이트 (주체) 개발/운영사가 제어 플랫폼 회사 / 소비자 제어
배포 주도권 / 반영 시간 개발 ,운영사 / 즉시 소비자 / 2~7일 (안할수도 있음)
# 022. /
1 % 0 .
,
) ) (
(
Governor (거버너) 상세 설명
) /
q f U t
D v cU m
) / sn ) /mX ( ) d wOf a m i F
C ) / r f Ip
( . ) / P f f v cU e
. U v c t F
U r v c t F .
. d U F U o t v c Ip
출처: http://dreamlog.tistory.com/4 [꿈꾸는 사람.]
n
./ -./ -: : o a et
./ Cbp U
G ct g d rrv
i hja s e ua
2 5 5: : o iP
>> * 085 >0 5 > 1 : 0 : ./ 0 -./ 5: :
#
,/ , ./ P C
I O ?
R
.
T
( . ) / , O
B De B
F I F h
ca / . / b ?
. ) (
Wear Leveling 전 Wear Leveling 후
6 / .
1 .
? / 1
# 0 .
#
밧데리의 수명은 제한적
제조사의 고민
• 오래 사용하기 위해 전력 소비량을 낮추던가?
• 동일한 전력을 계속 공급해 성능은 유지하지만,
2,3시간 만에 방전 되던가?
앞으로 다가올 모바일에
가장 큰 변화는..
NPU 와 Neural Network API
어디까지 클라우드 도움없이
모바일에서 AI 연산을 할 수 있을까?
샤오미가 적용한 시나리오
AI Camera
Single Lens Bokeh
Image
Super Resolution
Scene Recognition
Voice
Image
Style Transfer
Translation
싱글 렌즈의 단점 극복 (3D 효과) 또는 깨진 이미지 복원
화면 인식
Environment Landscape Plants Human/Objects
25 labels, recognition of
up to 206 scenes
sunny overcast cloudy
night snow candlelight
grass tree succulent
flower autumn
scene
maple
leaf
sunrise/sunset waterside
city building
cardog foodcat
portrait/ backlight/ silhouettePPTfile
Image Super Resolution
이미지 스타일 변신
#
Facebook 의 redex 프로젝트에 영향을 받는 것으로 추정.
http://bit.ly/2GGNuA4
#
모바일 QA = 사전 테스트 + 사후 크래시 분석
현재 모바일 앱 품질 확보 방안
.
Android iOS
CPU & GPU Memory NetworkStorage
Method Trace
Layout (60fps)
Wake Locks
Over Draws
Animations
Job Schedulers..
GC
Object Allocations
Caching
Background/Foregrou
nd Policy
BITMAP
Optimization..
Batch
(Job Scheduler)
Pre Patching
Data Compression
Response Time
Traffic, Packet, Error,
Dropped In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
#
.
,
G t G G l
/
+ , . C
f C
a t J G G t f r e
l d v G
) ( (
C L G R
.<; - ;
.<;
C L G R .<; - ; M
= ; > = ;( = ;
) ; ; S .>
C ea ( k f R
C C = C C 1; C C
1C< =3 C ; C, ; C)
; C G =3 C ; C, > ; C )
c
.- g C e S L C=mk M
3 C 2 Q l PM
G mQ h i 2 fQ lW i nR
R e b hM
, 2 2 2 2
. S G 2 2 2 2 2 2m O S M
, 2 2 2 2 a Q r c d u m WM
j P a Q c , u C n , u C hM
2. 2 2 2 2
2 2 2 2 2 2m O M
2. 2 2 2 2 , 2 2 2 2b R k o G M
a t d u g . 21 2 S fWM
, ,
2.
.
.
2 2 2 2 2 2
(다른작업도 쓰레드로 진행가능)
& & &
.
,
,
S
,. , , G
G S
G B R
G B R
R G C
)(
A !
변경된 메모리 Workflow
변경한 이유.. (Intel의 연구)
Object Size 분포 (Bytes)
변경한 이유.. (Google Map 사
례)
Object Life Time (1세대에서 대부분 걸러짐)
살아남는 %
GC 실행횟수
추가적인 기교들을 더함.
• ( k , yc s
• -. c w T R c u
• CP i R yc vm
• tD vA ri e s Avm
• py ) T M k e l Gi aw ) .
O c M m
Android L부터 GC 전략 추가
• CMS (기본전략)
• Mark-Sweep 전략을 유지하되 성능을 향상 시키는 방법
• Mark-Sweep 의 느린 속도를 해결하기 위해 병렬, 부분, 이전 세대에만 생성된 것을 제
거하는 방식 등이 종합적으로 적용함.
• SS : Semi Space (aka From Space To Space)
• 빠른 GC 방법 / 단 메모리는 많이 사용하는 방법 -> 단 첫 GC의 정확도는 Mark-Sweep
보다 낮은 문제가 있음.
• 2개의 Semi Space 를 만들어서 정리하는 방법
• GSS : Generation Semi Space
• Semi Space를 세대별로 하는 방법.
.
. 0 /. 0 5
Foreground gc (화면 담당)
Background gc (백드라운드 담당)
Foreground gc는 동시다발적으로 진행.
Background
gc는
Semi-Space
(#1)
Background
gc는
Gen Semi-
Space (#2)
Background
gc는
CMS (#3)
/ / /
Foreground GC (화면 담당)
Background GC (백드라운드 담당)
• ( . ) G o
M> o r S >
B G d G M> o
r S n e F
• - . ) B
g m G t
FC yc mk G
- - au pk
왜 Oreo부터
Foreground / Background
GC를
Concurrent Compaction
으로 단일화 하려고 할까?
줄어든 App Size, LOS/ ROS의 성공적인 도입,
멀티 코어 디바이스 확대
Background gctype 은 언제든지 변경
(기본 gc 설정은 제조사 마음)
• To disable background compaction do:
• adb shell setprop dalvik.vm.backgroundgctype CMS
• To enable:
• adb shell setprop dalvik.vm.backgroundgctype SS
MemFree vs MemoryAvailable.
cat /proc/meminfoOS 메모리 정보는
MemFree보다
MemAvailable을 이용하세요.
MemFree:
The amount of physical RAM, in kilobytes,
left unused by the system.
MemAvailable:
An estimate of how much memory is available
for starting new application
# #
( ) 10
3 . 0
. ,
, 0 , 3 , 3
D A L
30 I
. . + 03 C
+ + . + . A H
https://developer.android.com/guide/topics/graphics/hardware-accel.html
http://blog.danlew.net/2015/10/20/using-hardware-layers-to-improve-animation-performance/
0 0 R 5 0
5 A
? ) .C GP ( . M 0 0
.
CPU & GPU Memory NetworkStorage
UI Rendering Time
(Native, Web)
Event
GC Pause Time
Memory Allocation
Wear Level
HTTP Response Time
Traffic In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
# .
데이터를 수집하는 방법
주요 수집 데이터
• RL O B C B
• ( / N )
• /
• /
• B A A
• PI M
• BB A
• F
어떻게 수집하나?
• ): B + : @ : / :
• -. .A CC : / / B / / C/
A A CC : (
운영 대시보드
성능 대시보드
- 106 -
모바일 에서는 왜 DevOps가 필요해 졌나. (모바일)
파편화된 모바일 환경에서 어떻게 품질을 확보 해야지? (노트2의 점유율)
- 107 -
모바일 에서는 왜 DevOps가 필요해 졌나. (모바일)
Xiaomi 폰의 국내 점유율 4위
앱의 성능 기준
• CPU
Usage
• M
EM
O
RY
Usage
Netw
ork
Usage
URL
설
명
UI Rendering
UI Rendering
설명 – 화면이 뜨고 나서 시간 순서대로 스택정보 나열
14ms : 화면이 뜰때 초기하는 작업들이 너무 많음
236ms : 현 순간에도 화면 레이아웃을 구성하고 있는 중
1397ms : 화면의 프레임이 다 그려지지 않아 UI Thread에서 대기 하는 상황
문제 상황
A사 SDK HealthData에서 데이터를 받아오느라 화면 전체(UI Thread) 가 멈추는 상황이 발생함.
항상 로컬에 이전 데이터를 저장해서 먼저 보여주고, 사용자가 클릭시 정보를 가져오는 것으로 하는 것이 좋음
즉 인터넷이 연결되지 않아도 이전 데이터를 볼수 있도록 먼저 가이드라인을 잡기를 권고함.
고려 상황
화면 점유시간 3초 이상
화면을 다시 그리는 (Resume) 하는 상황에서, 화면 단에서 FileIO가 발생함
리소스 폰트를 가져오는 상황에서 지연이 발생되는 것으로 판단됨.
/
) . !
AA (
: : @ ( :
OH G NU
// @ / @ / @ @ @
P KT
Y A : A @ & @

More Related Content

What's hot

전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
onozaty
 
Git workflows
Git workflowsGit workflows
Git workflows
Xpand IT
 

What's hot (20)

github-actions.pdf
github-actions.pdfgithub-actions.pdf
github-actions.pdf
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
CD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfCD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdf
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)
 
CI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cdCI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cd
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
Git training v10
Git training v10Git training v10
Git training v10
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on Kubernetes
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
High Performance Object Storage in 30 Minutes with Supermicro and MinIO
High Performance Object Storage in 30 Minutes with Supermicro and MinIOHigh Performance Object Storage in 30 Minutes with Supermicro and MinIO
High Performance Object Storage in 30 Minutes with Supermicro and MinIO
 
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
 
Kubernetes: A Short Introduction (2019)
Kubernetes: A Short Introduction (2019)Kubernetes: A Short Introduction (2019)
Kubernetes: A Short Introduction (2019)
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 
GitOps with ArgoCD
GitOps with ArgoCDGitOps with ArgoCD
GitOps with ArgoCD
 
Git workflows
Git workflowsGit workflows
Git workflows
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 

Similar to 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)

모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
IMQA
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
Samsung Electronics
 
이력서_김태연_한글
이력서_김태연_한글이력서_김태연_한글
이력서_김태연_한글
TAIYEON KIM
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
Samsung Electronics
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
MinGeun Park
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
BJ Jang
 

Similar to 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) (20)

Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
Android Applications on Galaxy S (장기성)
Android Applications on Galaxy S (장기성)Android Applications on Galaxy S (장기성)
Android Applications on Galaxy S (장기성)
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
 
Long term feature banks for detailed video understanding (Action Recognition)
Long term feature banks for detailed video understanding (Action Recognition)Long term feature banks for detailed video understanding (Action Recognition)
Long term feature banks for detailed video understanding (Action Recognition)
 
이력서_김태연_한글
이력서_김태연_한글이력서_김태연_한글
이력서_김태연_한글
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
 

More from YoungSu Son

More from YoungSu Son (20)

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
 
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
 

모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)

  • 1. 모바일 앱 성능분석 방법 (안드로이드/ 실 사례 중심으로) ONYCOM 손영수
  • 2. • 8 • 0 ( • 0 8 . • 0 ) 8
  • 3. #
  • 4. .
  • 5. .
  • 7.
  • 8. () ()# 0 1 . 기본 제약들 서버 모바일 상시 전원 공급 ● X CPU / GPU 쿨러 (발열 방지) ● X 앱이 돌아가는 환경 단일 OS/ 디바이스 파편화 OS 버전 업데이트 (주체) 개발/운영사가 제어 플랫폼 회사 / 소비자 제어 배포 주도권 / 반영 시간 개발 ,운영사 / 즉시 소비자 / 2~7일 (안할수도 있음)
  • 10. 1 % 0 .
  • 11. ,
  • 12. ) ) ( ( Governor (거버너) 상세 설명 ) / q f U t D v cU m ) / sn ) /mX ( ) d wOf a m i F C ) / r f Ip ( . ) / P f f v cU e . U v c t F U r v c t F . . d U F U o t v c Ip 출처: http://dreamlog.tistory.com/4 [꿈꾸는 사람.]
  • 13. n ./ -./ -: : o a et ./ Cbp U G ct g d rrv i hja s e ua 2 5 5: : o iP >> * 085 >0 5 > 1 : 0 : ./ 0 -./ 5: :
  • 14. #
  • 15. ,/ , ./ P C I O ? R
  • 16.
  • 17.
  • 18.
  • 19. .
  • 20. T ( . ) / , O B De B F I F h ca / . / b ?
  • 21. . ) ( Wear Leveling 전 Wear Leveling 후
  • 22. 6 / . 1 . ? / 1
  • 23. # 0 .
  • 24.
  • 25. #
  • 26.
  • 27. 밧데리의 수명은 제한적 제조사의 고민 • 오래 사용하기 위해 전력 소비량을 낮추던가? • 동일한 전력을 계속 공급해 성능은 유지하지만, 2,3시간 만에 방전 되던가?
  • 29. NPU 와 Neural Network API
  • 30. 어디까지 클라우드 도움없이 모바일에서 AI 연산을 할 수 있을까? 샤오미가 적용한 시나리오 AI Camera Single Lens Bokeh Image Super Resolution Scene Recognition Voice Image Style Transfer Translation
  • 31. 싱글 렌즈의 단점 극복 (3D 효과) 또는 깨진 이미지 복원
  • 32. 화면 인식 Environment Landscape Plants Human/Objects 25 labels, recognition of up to 206 scenes sunny overcast cloudy night snow candlelight grass tree succulent flower autumn scene maple leaf sunrise/sunset waterside city building cardog foodcat portrait/ backlight/ silhouettePPTfile
  • 35. #
  • 36.
  • 37.
  • 38. Facebook 의 redex 프로젝트에 영향을 받는 것으로 추정. http://bit.ly/2GGNuA4
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58. #
  • 59. 모바일 QA = 사전 테스트 + 사후 크래시 분석
  • 60. 현재 모바일 앱 품질 확보 방안
  • 61.
  • 63.
  • 64. CPU & GPU Memory NetworkStorage Method Trace Layout (60fps) Wake Locks Over Draws Animations Job Schedulers.. GC Object Allocations Caching Background/Foregrou nd Policy BITMAP Optimization.. Batch (Job Scheduler) Pre Patching Data Compression Response Time Traffic, Packet, Error, Dropped In/Out File I/O SQL Lite Operations IOPS CPU / GPU Governor VSync Wear Leveling Seq , Random Read/Write Speed Battery Power Consumption WWAN(HSPA, LTE, WiMAX..) Peak Bit Rate / Throughput MAX Wear Leveling Seq , Random Read/Write Speed
  • 65. #
  • 66. . ,
  • 67. G t G G l / + , . C f C a t J G G t f r e l d v G
  • 68. ) ( (
  • 69. C L G R .<; - ; .<; C L G R .<; - ; M = ; > = ;( = ; ) ; ; S .>
  • 70. C ea ( k f R C C = C C 1; C C 1C< =3 C ; C, ; C) ; C G =3 C ; C, > ; C ) c .- g C e S L C=mk M 3 C 2 Q l PM G mQ h i 2 fQ lW i nR
  • 71. R e b hM , 2 2 2 2 . S G 2 2 2 2 2 2m O S M , 2 2 2 2 a Q r c d u m WM j P a Q c , u C n , u C hM 2. 2 2 2 2 2 2 2 2 2 2m O M 2. 2 2 2 2 , 2 2 2 2b R k o G M a t d u g . 21 2 S fWM , , 2. . . 2 2 2 2 2 2
  • 73. .
  • 74. , , S ,. , , G G S G B R G B R R G C )( A !
  • 76. 변경한 이유.. (Intel의 연구) Object Size 분포 (Bytes)
  • 77. 변경한 이유.. (Google Map 사 례) Object Life Time (1세대에서 대부분 걸러짐) 살아남는 % GC 실행횟수
  • 78. 추가적인 기교들을 더함. • ( k , yc s • -. c w T R c u • CP i R yc vm • tD vA ri e s Avm • py ) T M k e l Gi aw ) . O c M m
  • 79. Android L부터 GC 전략 추가 • CMS (기본전략) • Mark-Sweep 전략을 유지하되 성능을 향상 시키는 방법 • Mark-Sweep 의 느린 속도를 해결하기 위해 병렬, 부분, 이전 세대에만 생성된 것을 제 거하는 방식 등이 종합적으로 적용함. • SS : Semi Space (aka From Space To Space) • 빠른 GC 방법 / 단 메모리는 많이 사용하는 방법 -> 단 첫 GC의 정확도는 Mark-Sweep 보다 낮은 문제가 있음. • 2개의 Semi Space 를 만들어서 정리하는 방법 • GSS : Generation Semi Space • Semi Space를 세대별로 하는 방법.
  • 80. .
  • 81. . 0 /. 0 5 Foreground gc (화면 담당) Background gc (백드라운드 담당)
  • 86. / / / Foreground GC (화면 담당) Background GC (백드라운드 담당) • ( . ) G o M> o r S > B G d G M> o r S n e F • - . ) B g m G t FC yc mk G - - au pk
  • 87. 왜 Oreo부터 Foreground / Background GC를 Concurrent Compaction 으로 단일화 하려고 할까?
  • 88. 줄어든 App Size, LOS/ ROS의 성공적인 도입, 멀티 코어 디바이스 확대
  • 89. Background gctype 은 언제든지 변경 (기본 gc 설정은 제조사 마음) • To disable background compaction do: • adb shell setprop dalvik.vm.backgroundgctype CMS • To enable: • adb shell setprop dalvik.vm.backgroundgctype SS
  • 90. MemFree vs MemoryAvailable. cat /proc/meminfoOS 메모리 정보는 MemFree보다 MemAvailable을 이용하세요. MemFree: The amount of physical RAM, in kilobytes, left unused by the system. MemAvailable: An estimate of how much memory is available for starting new application
  • 91. # #
  • 93. 3 . 0
  • 94. . , , 0 , 3 , 3 D A L
  • 95. 30 I . . + 03 C + + . + . A H https://developer.android.com/guide/topics/graphics/hardware-accel.html http://blog.danlew.net/2015/10/20/using-hardware-layers-to-improve-animation-performance/
  • 96. 0 0 R 5 0 5 A ? ) .C GP ( . M 0 0
  • 97.
  • 98.
  • 99. . CPU & GPU Memory NetworkStorage UI Rendering Time (Native, Web) Event GC Pause Time Memory Allocation Wear Level HTTP Response Time Traffic In/Out File I/O SQL Lite Operations IOPS CPU / GPU Governor VSync Wear Leveling Seq , Random Read/Write Speed Battery Power Consumption WWAN(HSPA, LTE, WiMAX..) Peak Bit Rate / Throughput MAX Wear Leveling Seq , Random Read/Write Speed
  • 100. # .
  • 102. 주요 수집 데이터 • RL O B C B • ( / N ) • / • / • B A A • PI M • BB A • F
  • 103. 어떻게 수집하나? • ): B + : @ : / : • -. .A CC : / / B / / C/ A A CC : (
  • 106. - 106 - 모바일 에서는 왜 DevOps가 필요해 졌나. (모바일) 파편화된 모바일 환경에서 어떻게 품질을 확보 해야지? (노트2의 점유율)
  • 107. - 107 - 모바일 에서는 왜 DevOps가 필요해 졌나. (모바일) Xiaomi 폰의 국내 점유율 4위
  • 112. 설명 – 화면이 뜨고 나서 시간 순서대로 스택정보 나열 14ms : 화면이 뜰때 초기하는 작업들이 너무 많음 236ms : 현 순간에도 화면 레이아웃을 구성하고 있는 중 1397ms : 화면의 프레임이 다 그려지지 않아 UI Thread에서 대기 하는 상황
  • 113. 문제 상황 A사 SDK HealthData에서 데이터를 받아오느라 화면 전체(UI Thread) 가 멈추는 상황이 발생함. 항상 로컬에 이전 데이터를 저장해서 먼저 보여주고, 사용자가 클릭시 정보를 가져오는 것으로 하는 것이 좋음 즉 인터넷이 연결되지 않아도 이전 데이터를 볼수 있도록 먼저 가이드라인을 잡기를 권고함.
  • 114. 고려 상황 화면 점유시간 3초 이상 화면을 다시 그리는 (Resume) 하는 상황에서, 화면 단에서 FileIO가 발생함 리소스 폰트를 가져오는 상황에서 지연이 발생되는 것으로 판단됨.
  • 115.
  • 116.
  • 117. /
  • 118. ) . ! AA ( : : @ ( : OH G NU // @ / @ / @ @ @ P KT Y A : A @ & @