dumpsys, Android cihazlarda çalışan ve sistem hizmetleri hakkında bilgi sağlayan bir araçtır. Bağlı bir cihazda çalışan tüm sistem hizmetleri için teşhis çıktısı almak üzere Android Debug Bridge (ADB)'yi kullanarak komut satırından dumpsys işlevini çağırın.
Bu çıktı genellikle istediğinizden daha ayrıntılıdır. Bu nedenle, yalnızca istediğiniz sistem hizmetleriyle ilgili çıktı almak için bu sayfadaki komut satırı seçeneklerini kullanın. Bu sayfada, giriş, RAM, pil veya ağ teşhislerini inceleme gibi yaygın görevleri gerçekleştirmek için dumpsys'nın nasıl kullanılacağı da açıklanmaktadır.
Söz dizimi
dumpsys kullanımıyla ilgili genel söz dizimi aşağıdaki gibidir:
adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]
Bağlı cihazınızdaki tüm sistem hizmetleri için teşhis çıktısı almak üzere adb shell dumpsys komutunu çalıştırın.
Ancak bu komut, normalde isteyeceğinizden çok daha fazla bilgi verir. Daha yönetilebilir bir çıktı için komuta dahil ederek incelemek istediğiniz hizmeti belirtin. Örneğin, aşağıdaki komut, dokunmatik ekranlar veya yerleşik klavyeler gibi giriş bileşenleri için sistem verileri sağlar:
adb shell dumpsys input
dumpsys ile kullanabileceğiniz sistem hizmetlerinin tam listesi için aşağıdaki komutu kullanın:
adb shell dumpsys -l
Komut satırı seçenekleri
Aşağıdaki tabloda, dumpsys kullanılırken kullanılabilen seçenekler listelenmiştir:
Tablo 1. dumpsys için kullanılabilen seçeneklerin listesi
| Seçenek | Açıklama |
|---|---|
-t timeout
|
Zaman aşımı süresini saniye cinsinden belirtin. Belirtilmediğinde varsayılan değer 10 saniyedir. |
--help
|
dumpsys aracıyla ilgili yardım metnini yazdırın.
|
-l
|
dumpsys ile kullanabileceğiniz sistem hizmetlerinin tam listesini oluşturun.
|
--skip services
|
Çıktıya dahil etmek istemediğiniz services öğesini belirtin. |
service [arguments]
|
Çıkarmak istediğiniz service değerini belirtin. Bazı hizmetler, isteğe bağlı arguments'ları iletmenize izin verebilir. Bu isteğe bağlı bağımsız değişkenler hakkında bilgi edinmek için hizmetle birlikte -h seçeneğini iletin:
adb shell dumpsys procstats -h
|
-c
|
Belirli hizmetleri belirtirken bu seçeneği, makine dostu bir biçimde çıktı verilerine ekleyin. |
-h
|
Belirli hizmetler için yardım metnini ve ek seçenekleri görmek üzere bu seçeneği ekleyin. |
Giriş teşhislerini inceleme
Aşağıdaki komutta gösterildiği gibi input hizmetini belirtmek, sistemin giriş cihazlarının (ör. klavye ve dokunmatik ekranlar) durumunu ve giriş etkinliklerinin işlenmesini boşaltır.
adb shell dumpsys input
Çıkış, bağlı cihazda çalışan Android sürümüne göre değişir. Aşağıdaki bölümlerde, genellikle gördüğünüz bilgi türü açıklanmaktadır.
Etkinlik merkezi durumu
Aşağıda, giriş teşhislerinin Event Hub State (Olay Hub'ı Durumu) incelenirken görebileceğiniz bir örnek verilmiştir:
INPUT MANAGER (dumpsys input)
Event Hub State:
BuiltInKeyboardId: -2
Devices:
-1: Virtual
Classes: 0x40000023
Path:
Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile: /system/usr/keylayout/Generic.kl
KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
1: msm8974-taiko-mtp-snd-card Headset Jack
Classes: 0x00000080
Path: /dev/input/event5
Descriptor: c8e3782483b4837ead6602e20483c46ff801112c
Location: ALSA
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile:
KeyCharacterMapFile:
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
2: msm8974-taiko-mtp-snd-card Button Jack
Classes: 0x00000001
Path: /dev/input/event4
Descriptor: 96fe62b244c555351ec576b282232e787fb42bab
Location: ALSA
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile: /system/usr/keylayout/msm8974-taiko-mtp-snd-card_Button_Jack.kl
KeyCharacterMapFile: /system/usr/keychars/msm8974-taiko-mtp-snd-card_Button_Jack.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
3: hs_detect
Classes: 0x00000081
Path: /dev/input/event3
Descriptor: 485d69228e24f5e46da1598745890b214130dbc4
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0000, vendor=0x0001, product=0x0001, version=0x0001
KeyLayoutFile: /system/usr/keylayout/hs_detect.kl
KeyCharacterMapFile: /system/usr/keychars/hs_detect.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
...
Giriş okuyucu durumu
InputReader, çekirdekten gelen giriş etkinliklerinin kodunu çözmekten sorumludur. Durum dökümü, her giriş cihazının nasıl yapılandırıldığı ve son durum değişiklikleri (ör. tuşlara basma veya dokunmatik ekrana dokunma) hakkında bilgi gösterir.
Aşağıdaki örnekte, dokunmatik ekran için çıkış gösterilmektedir. Cihazın çözünürlüğü ve kullanılan kalibrasyon parametreleri hakkında bilgi edinin.
Input Reader State
...
Device 6: Melfas MMSxxx Touchscreen
IsExternal: false
Sources: 0x00001002
KeyboardType: 0
Motion Ranges:
X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
Touch Input Mapper:
Parameters:
GestureMode: spots
DeviceType: touchScreen
AssociatedDisplay: id=0, isExternal=false
OrientationAware: true
Raw Touch Axes:
X: min=0, max=720, flat=0, fuzz=0, resolution=0
Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
TouchMinor: unknown range
ToolMajor: unknown range
ToolMinor: unknown range
Orientation: unknown range
Distance: unknown range
TiltX: unknown range
TiltY: unknown range
TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
Calibration:
touch.size.calibration: diameter
touch.size.scale: 10.000
touch.size.bias: 0.000
touch.size.isSummed: false
touch.pressure.calibration: amplitude
touch.pressure.scale: 0.005
touch.orientation.calibration: none
touch.distance.calibration: none
SurfaceWidth: 720px
SurfaceHeight: 1280px
SurfaceOrientation: 0
Translation and Scaling Factors:
XScale: 0.999
YScale: 0.999
XPrecision: 1.001
YPrecision: 1.001
GeometricScale: 0.999
PressureScale: 0.005
SizeScale: 0.033
OrientationCenter: 0.000
OrientationScale: 0.000
DistanceScale: 0.000
HaveTilt: false
TiltXCenter: 0.000
TiltXScale: 0.000
TiltYCenter: 0.000
TiltYScale: 0.000
Last Button State: 0x00000000
Last Raw Touch: pointerCount=0
Last Cooked Touch: pointerCount=0
Giriş okuyucu durum dökümünün sonunda, dokunma aralığı gibi genel yapılandırma parametreleri hakkında bazı bilgiler yer alır:
Configuration:
ExcludedDeviceNames: []
VirtualKeyQuietTime: 0.0ms
PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
PointerGesture:
Enabled: true
QuietInterval: 100.0ms
DragMinSwitchSpeed: 50.0px/s
TapInterval: 150.0ms
TapDragInterval: 300.0ms
TapSlop: 20.0px
MultitouchSettleInterval: 100.0ms
MultitouchMinDistance: 15.0px
SwipeTransitionAngleCosine: 0.3
SwipeMaxWidthRatio: 0.2
MovementSpeedRatio: 0.8
ZoomSpeedRatio: 0.3
Giriş dağıtıcı durumu
InputDispatcher, giriş etkinliklerini uygulamalara göndermekten sorumludur.
Aşağıdaki örnek çıktıda gösterildiği gibi, durum dökümü hangi pencereye dokunulduğu, giriş kuyruğunun durumu, ANR'nin devam edip etmediği ve diğer giriş etkinliği bilgileri hakkında bilgi gösterir:
Input Dispatcher State:
DispatchEnabled: 1
DispatchFrozen: 0
FocusedApplication: <null>
FocusedWindow: name='Window{3fb06dc3 u0 StatusBar}'
TouchStates: <no displays touched>
Windows:
0: name='Window{357bbbfe u0 SearchPanel}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01820100, type=0x000007e8, layer=211000, frame=[0,0][1080,1920], scale=1.000000, touchableRegion=[0,0][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
1: name='Window{3b14c0ca u0 NavigationBar}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01840068, type=0x000007e3, layer=201000, frame=[0,1776][1080,1920], scale=1.000000, touchableRegion=[0,1776][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
2: name='Window{2c7e849c u0 com.vito.lux}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x0089031a, type=0x000007d6, layer=191000, frame=[-495,-147][1575,1923], scale=1.000000, touchableRegion=[-495,-147][1575,1923], inputFeatures=0x00000000, ownerPid=4697, ownerUid=10084, dispatchingTimeout=5000.000ms
...
MonitoringChannels:
0: 'WindowManager (server)'
RecentQueue: length=10
MotionEvent(deviceId=4, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217264.0ms
MotionEvent(deviceId=4, source=0x00001002, action=1, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217255.7ms
MotionEvent(deviceId=4, source=0x00001002, action=0, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (330.0, 1283.0)]), policyFlags=0x62000000, age=216805.0ms
...
PendingEvent: <none>
InboundQueue: <empty>
ReplacedKeys: <empty>
Connections:
0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
1: channelName='278c1d65 KeyguardScrim (server)', windowName='Window{278c1d65 u0 KeyguardScrim}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
2: channelName='357bbbfe SearchPanel (server)', windowName='Window{357bbbfe u0 SearchPanel}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
...
AppSwitch: not pending
7: channelName='2280455f com.google.android.gm/com.google.android.gm.ConversationListActivityGmail (server)', windowName='Window{2280455f u0 com.google.android.gm/com.google.android.gm.ConversationListActivityGmail}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
8: channelName='1a7be08a com.android.systemui/com.android.systemui.recents.RecentsActivity (server)', windowName='Window{1a7be08a u0 com.android.systemui/com.android.systemui.recents.RecentsActivity EXITING}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
9: channelName='3b14c0ca NavigationBar (server)', windowName='Window{3b14c0ca u0 NavigationBar}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
...
Configuration:
KeyRepeatDelay: 50.0ms
KeyRepeatTimeout: 500.0ms
Kontrol edilecekler
input hizmetinin çıktısını incelerken göz önünde bulundurmanız gereken noktalar aşağıda listelenmiştir:
Etkinlik merkezi durumu:
- Beklediğiniz tüm giriş cihazları mevcut.
- Her giriş cihazı için uygun bir tuş düzeni dosyası, tuş karakteri eşleme dosyası ve giriş cihazı yapılandırma dosyası bulunur. Dosyalar eksikse veya söz dizimi hatası içeriyorsa yüklenmez.
- Her giriş cihazı doğru şekilde sınıflandırılır.
Classesalanındaki bitler,EventHub.hiçindekiINPUT_DEVICE_CLASS_TOUCH_MTgibi işaretlere karşılık gelir. -
BuiltInKeyboardIddoğru. Cihazda yerleşik klavye yoksa kimlik-2olmalıdır. Aksi takdirde, yerleşik klavyenin kimliği olmalıdır. BuiltInKeyboardIdsimgesinin-2olmadığını ancak olması gerektiğini fark ederseniz özel işlevli tuş takımı için önemli bir karakter eşleme dosyası eksik demektir. Özel işlevli tuş takımı cihazları, yalnızcatype SPECIAL_FUNCTIONsatırını içeren tuş karakteri eşleme dosyalarına sahip olmalıdır.
Giriş okuyucu durumu:
- Beklenen tüm giriş cihazları mevcut.
- Her giriş cihazı doğru şekilde yapılandırılmış olmalıdır. Özellikle dokunmatik ekranın ve joystick eksenlerinin doğru olup olmadığını kontrol edin.
Giriş dağıtıcı durumu:
- Tüm giriş etkinlikleri beklendiği gibi işlenir.
- Dokunmatik ekrana dokunduktan ve aynı anda
dumpsyskomutunu çalıştırdıktan sonraTouchStatessatırı, dokunduğunuz pencereyi doğru şekilde tanımlar.
Kullanıcı arayüzü performansını test etme
gfxinfo hizmetinin belirtilmesi, kayıt aşamasında gerçekleşen animasyon kareleriyle ilgili performans bilgilerini içeren bir çıktı sağlar.
Aşağıdaki komut, belirtilen bir paket adının kullanıcı arayüzü performans verilerini toplamak için gfxinfo kullanır:
adb shell dumpsys gfxinfo package-name
Sorunları daha doğru bir şekilde tespit edip hata ayıklama işlemini gerçekleştirebilmeniz için son karelerden daha ayrıntılı kare zamanlaması bilgileri sağlamak üzere framestats seçeneğini de ekleyebilirsiniz:
adb shell dumpsys gfxinfo package-name framestats
Kullanıcı arayüzü performans ölçümlerini test uygulamalarınıza entegre etmek için gfxinfo ve framestats kullanma hakkında daha fazla bilgi edinmek için Makrobenchmark Yazma başlıklı makaleyi inceleyin.
Ağ teşhislerini inceleme
netstats hizmetinin belirtilmesi, önceki cihaz başlatıldığından beri toplanan ağ kullanım istatistiklerini sağlar. Ayrıntılı benzersiz kullanıcı kimliği (UID) bilgileri gibi ek bilgiler çıkışa aktarmak için detail seçeneğini aşağıdaki gibi ekleyin:
adb shell dumpsys netstats detail
Çıkış, bağlı cihazda çalışan Android sürümüne göre değişir. Aşağıdaki bölümlerde, genellikle gördüğünüz bilgi türü açıklanmaktadır.
Etkin arayüzler ve etkin UID arayüzleri
Aşağıdaki örnek çıktıda, bağlı cihazın etkin arayüzleri ve etkin UID arayüzleri listelenmektedir. Çoğu durumda, etkin arayüzler ve etkin UID arayüzleriyle ilgili bilgiler aynıdır.
Active interfaces:
iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
Active UID interfaces:
iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
"Dev" ve "Xt" istatistikleri
Aşağıda, geliştirici istatistikleri bölümüne ait örnek bir çıktı verilmiştir:
Dev stats:
Pending bytes: 1798112
History since boot:
ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
NetworkStatsHistory: bucketDuration=3600
st=1497891600 rb=1220280 rp=1573 tb=309870 tp=1271 op=0
st=1497895200 rb=29733 rp=145 tb=85354 tp=185 op=0
st=1497898800 rb=46784 rp=162 tb=42531 tp=192 op=0
st=1497902400 rb=27570 rp=111 tb=35990 tp=121 op=0
Xt stats:
Pending bytes: 1771782
History since boot:
ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
NetworkStatsHistory: bucketDuration=3600
st=1497891600 rb=1219598 rp=1557 tb=291628 tp=1255 op=0
st=1497895200 rb=29623 rp=142 tb=82699 tp=182 op=0
st=1497898800 rb=46684 rp=160 tb=39756 tp=191 op=0
st=1497902400 rb=27528 rp=110 tb=34266 tp=120 op=0
UID istatistikleri
Aşağıda, her bir UID'ye ilişkin ayrıntılı istatistik örneği verilmiştir:
UID stats:
Pending bytes: 744
Complete history:
ident=[[type=MOBILE_SUPL, subType=COMBINED, subscriberId=311111...], [type=MOBILE, subType=COMBINED, subscriberId=311111...]] uid=10007 set=DEFAULT tag=0x0
NetworkStatsHistory: bucketDuration=7200000
bucketStart=1406167200000 activeTime=7200000 rxBytes=4666 rxPackets=7 txBytes=1597 txPackets=10 operations=0
ident=[[type=WIFI, subType=COMBINED, networkId="MySSID"]] uid=10007 set=DEFAULT tag=0x0
NetworkStatsHistory: bucketDuration=7200000
bucketStart=1406138400000 activeTime=7200000 rxBytes=17086802 rxPackets=15387 txBytes=1214969 txPackets=8036 operations=28
bucketStart=1406145600000 activeTime=7200000 rxBytes=2396424 rxPackets=2946 txBytes=464372 txPackets=2609 operations=70
bucketStart=1406152800000 activeTime=7200000 rxBytes=200907 rxPackets=606 txBytes=187418 txPackets=739 operations=0
bucketStart=1406160000000 activeTime=7200000 rxBytes=826017 rxPackets=1126 txBytes=267342 txPackets=1175 operations=35
Uygulamanızın UID'sini bulmak için şu komutu çalıştırın: adb shell dumpsys
package your-package-name. Ardından userId etiketli satırı bulun.
Örneğin, "com.example.myapp" uygulamasının ağ kullanımını bulmak için aşağıdaki komutu çalıştırın:
adb shell dumpsys package com.example.myapp | grep userId
Çıkış şu şekilde görünmelidir:
userId=10007 gids=[3003, 1028, 1015]
Yukarıdaki örnek dökümü kullanarak uid=10007 içeren satırları bulun. Bu tür iki satır vardır. Birincisi mobil bağlantıyı, ikincisi ise kablosuz bağlantıyı gösterir. Her satırın altında, her iki saatlik aralık için aşağıdaki bilgileri görebilirsiniz. Bu bilgiler, bucketDuration ile milisaniye cinsinden belirtilir:
-
set=DEFAULTön plan ağ kullanımını,set=BACKGROUNDise arka plan kullanımını gösterir.set=ALLher ikisini de ifade eder. -
tag=0x0, trafikle ilişkili soket etiketini gösterir. -
rxBytesverxPackets, ilgili zaman aralığında alınan baytları ve paketleri temsil eder. -
txBytesvetxPackets, ilgili zaman aralığında gönderilen (aktarılan) baytları ve gönderilen paketleri temsil eder.
Pil teşhisini inceleme
batterystats hizmetinin belirtilmesi, benzersiz kullanıcı kimliğine (UID) göre düzenlenen, cihazdaki pil kullanımıyla ilgili istatistiksel veriler oluşturur. dumpsys'ı kullanarak uygulamanızı Doz ve Uygulamayı Beklemeye Alma için nasıl test edeceğinizi öğrenmek istiyorsanız Doz ve Uygulamayı Beklemeye Alma ile Test Etme başlıklı makaleyi inceleyin.
batterystats için komut şu şekildedir:
adb shell dumpsys batterystats options
batterystats için kullanılabilen ek seçeneklerin listesini görmek istiyorsanız -h seçeneğini ekleyin. Aşağıdaki örnekte, cihaz son şarj edildiğinden beri belirtilen bir uygulama paketinin pil kullanım istatistikleri gösterilmektedir:
adb shell dumpsys batterystats --charged package-name
Çıkış genellikle şunları içerir:
- Pille ilgili etkinliklerin geçmişi
- Cihazla ilgili genel istatistikler
- UID ve sistem bileşeni başına yaklaşık güç kullanımı
- Paket başına uygulamaya özgü mobil milisaniye
- Sistem UID'si toplu istatistikleri
- Uygulama UID'si toplu istatistikleri
batterystats kullanma ve çıkışın HTML görselleştirmesini oluşturma hakkında daha fazla bilgi edinmek için (bu sayede pille ilgili sorunları anlamak ve teşhis etmek kolaylaşır) Batterystats ve Battery Historian ile pil kullanımını profilleme başlıklı makaleyi inceleyin.
Makine dostu çıkışı inceleme
Aşağıdaki komutu kullanarak makine tarafından okunabilir CSV biçiminde batterystats çıktısı oluşturabilirsiniz:
adb shell dumpsys batterystats --checkin
Çıkış örneği:
9,0,i,vers,11,116,K,L 9,0,i,uid,1000,android 9,0,i,uid,1000,com.android.providers.settings 9,0,i,uid,1000,com.android.inputdevices 9,0,i,uid,1000,com.android.server.telecom ... 9,0,i,dsd,1820451,97,s-,p- 9,0,i,dsd,3517481,98,s-,p- 9,0,l,bt,0,8548446,1000983,8566645,1019182,1418672206045,8541652,994188 9,0,l,gn,0,0,666932,495312,0,0,2104,1444 9,0,l,m,6794,0,8548446,8548446,0,0,0,666932,495312,0,697728,0,0,0,5797,0,0 ...
Pil kullanımıyla ilgili gözlemler, UID başına veya sistem düzeyinde olabilir. Veriler, pil performansının analizinde yararlı olmasına göre dahil edilmek üzere seçilir. Her satır, aşağıdaki öğeleri içeren bir gözlemi temsil eder:
- Yer tutucu tamsayı
- Gözlemle ilişkili kullanıcı kimliği
- Toplama modu:
- Ücretli/ücretsiz durumla ilişkili olmayan bilgiler için
i. --chargediçinl(son şarjdan bu yana kullanım).--unpluggediçinu(son fişten çekilme işleminden sonraki kullanım). Android 5.1.1'de desteği sonlandırıldı.
- Ücretli/ücretsiz durumla ilişkili olmayan bilgiler için
- Satırdaki sonraki değerlerin nasıl yorumlanacağını belirleyen bölüm tanımlayıcısı.
Aşağıdaki tabloda, görebileceğiniz çeşitli bölüm tanımlayıcıları açıklanmaktadır:
Tablo 2. Bölüm tanımlayıcılarının listesi
| Bölüm tanımlayıcısı | Açıklama | Kalan alanlar |
|---|---|---|
|
Sürüm |
|
|
UID |
|
|
APK |
|
|
İşleme |
|
|
Sensör |
|
|
Vibratör |
|
|
Ön plan |
|
|
Eyalet Saati |
|
|
Uyanık kalma kilidi |
|
|
Senkronizasyon |
|
|
İş |
|
|
Çekirdek Uyanık Kalma Kilidi |
|
|
Uyandırma Nedeni |
|
|
Ağ |
|
|
Kullanıcı Etkinliği |
|
|
Pil |
|
|
Pil Deşarjı |
|
|
Pil Düzeyi |
|
|
Kablosuz bağlantı |
|
|
Global Wi-Fi |
|
|
Global Bluetooth |
|
|
Çeşitli |
|
|
Küresel Ağ |
|
|
Ekran Parlaklığı |
|
|
Sinyal Tarama Süresi |
|
|
Sinyal Gücü Süresi |
|
|
Sinyal Gücü Sayısı |
|
|
Veri Bağlantı Süresi |
|
|
Veri Bağlantısı Sayısı |
|
|
Kablosuz Durumu Süresi |
|
|
Kablosuz Durum Sayısı |
|
|
Wi-Fi Supplicant State Time |
|
|
Kablosuz ağ istemci durumu sayısı |
|
|
Kablosuz sinyal gücü süresi |
|
|
Kablosuz sinyal gücü sayısı |
|
|
Bluetooth Durumu Zamanı |
|
|
Bluetooth Durumu Sayısı |
|
|
Güç Kullanımı Özeti |
|
|
Güç Kullanımı Öğesi |
|
|
Deşarj Adımı |
|
|
Ücretlendirme Adımı |
|
|
Kalan deşarj süresi |
|
|
Kalan Şarj Süresi |
|
Not: Android 6.0'dan önce Bluetooth radyosu, hücresel radyo ve kablosuz için güç kullanımı m (Çeşitli) bölüm kategorisinde izleniyordu. Android 6.0 ve sonraki sürümlerde bu bileşenlerin güç kullanımı, her bileşen için ayrı etiketler (wifi, blue, cell) içeren pwi (Güç Kullanımı Öğesi) bölümünde izlenir.
Bellek ayırmalarını görüntüleme
Uygulamanızın bellek kullanımını iki şekilde inceleyebilirsiniz: procstats kullanarak belirli bir süre boyunca veya meminfo kullanarak belirli bir noktada.
Aşağıdaki bölümlerde her iki yöntemi de nasıl kullanacağınız gösterilmektedir.
procstats
procstats, uygulamanızın zaman içindeki davranışını (arka planda ne kadar süre çalıştığı ve bu süre zarfında ne kadar bellek kullandığı dahil) görmenizi sağlar. Uygulamanızda, özellikle düşük bellekli cihazlarda çalışırken performansını etkileyebilecek bellek sızıntıları gibi verimsizlikleri ve hatalı davranışları hızlıca bulmanıza yardımcı olur. Durum dökümü, her uygulamanın çalışma zamanı, orantılı küme boyutu (PSS), benzersiz küme boyutu (USS) ve yerleşik küme boyutu (RSS) ile ilgili istatistikleri gösterir.
Son üç saatteki uygulama bellek kullanımı istatistiklerini okunabilir biçimde almak için aşağıdaki komutu çalıştırın:
adb shell dumpsys procstats --hours 3
Aşağıdaki örnekte gösterildiği gibi, çıkışta uygulamanın ne kadar süre çalıştığı ve örnek sayısına göre minPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS/minRSS-avgRSS-maxRSS olarak PSS, USS ve RSS gösterilir.
AGGREGATED OVER LAST 3 HOURS:
* com.android.systemui / u0a37 / v28:
TOTAL: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
Persistent: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
* com.android.se / 1068 / v28:
TOTAL: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
Persistent: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
* com.google.android.gms.persistent / u0a7 / v19056073:
TOTAL: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
Imp Fg: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
...
* com.android.gallery3d / u0a62 / v40030:
TOTAL: 0.01%
Receiver: 0.01%
(Cached): 54% (6.4MB-6.5MB-6.9MB/4.4MB-4.4MB-4.4MB/4.4MB-26MB-68MB over 6)
* com.google.android.tvlauncher / u0a30 / v1010900130:
TOTAL: 0.01%
Receiver: 0.01%
(Cached): 91% (5.8MB-13MB-14MB/3.5MB-10MB-12MB/12MB-33MB-78MB over 6)
* com.android.vending:instant_app_installer / u0a16 / v81633968:
TOTAL: 0.01%
Receiver: 0.01%
(Cached): 100% (14MB-15MB-16MB/3.8MB-4.2MB-5.1MB/3.8MB-30MB-95MB over 7)
...
Run time Stats:
SOff/Norm: +32m52s226ms
SOn /Norm: +2h10m8s364ms
Mod : +17s930ms
TOTAL: +2h43m18s520ms
Memory usage:
Kernel : 265MB (38 samples)
Native : 73MB (38 samples)
Persist: 262MB (90 samples)
Top : 190MB (325 samples)
ImpFg : 204MB (569 samples)
ImpBg : 754KB (345 samples)
Service: 93MB (1912 samples)
Receivr: 227KB (1169 samples)
Home : 66MB (12 samples)
LastAct: 30MB (255 samples)
CchAct : 220MB (450 samples)
CchCAct: 193MB (71 samples)
CchEmty: 182MB (652 samples)
Cached : 58MB (38 samples)
Free : 60MB (38 samples)
TOTAL : 1.9GB
ServRst: 50KB (278 samples)
Start time: 2015-04-08 13:44:18
Total elapsed time: +2h43m18s521ms (partial) libart.so
meminfo
Aşağıdaki komutla uygulamanızın belleğinin farklı RAM ayırma türleri arasında nasıl bölündüğünün anlık görüntüsünü kaydedebilirsiniz:
adb shell dumpsys meminfo [-d] package_name|pid
-d işareti, Dalvik ve ART bellek kullanımıyla ilgili daha fazla bilgi yazdırır.
-h işareti, desteklenen tüm işaretleri yazdırır.
Çıkışta, uygulamanızın mevcut tüm tahsisleri listelenir. Bu tahsisler kilobayt cinsinden ölçülür.
Bu bilgileri incelerken aşağıdaki tahsis türlerini bilmeniz gerekir:
- Özel temiz ve kirli RAM
- Bu, yalnızca işleminiz tarafından kullanılan bellektir. Bu, uygulamanızın işlemi yok edildiğinde sistemin geri alabileceği RAM'in büyük bir kısmıdır. Genel olarak, bu alanın en önemli kısmı özel kirli RAM'dir. Bu alan, yalnızca işleminiz tarafından kullanıldığı ve içeriği öncelikle etkin RAM'de bulunduğu için en maliyetli olanıdır. Android, geleneksel disk takas dosyalarını kullanmaktan kaçınsa da kirli sayfaları takas etmek için zRAM'i (bellek içi sayfa sıkıştırma) ve boşta kalan sayfaları flash bellekte depolamak için zaman zaman zRAM Writeback'i kullanır. Ancak sayfa sıkıştırma CPU döngülerine mal olduğundan ve donanım aşınmasını önlemek için flash yazma işlemleri kesinlikle sınırlandırıldığından, özel kirli RAM maliyetsiz olarak çıkarılamaz. Yaptığınız tüm Dalvik ve yerel yığın ayırmaları, özel kirli RAM'dir. Zygote işlemiyle paylaştığınız Dalvik ve yerel ayırmalar, paylaşılan kirli RAM'dir.
- Orantılı Küme Boyutu (PSS)
- Bu, işlemler arasında sayfaların paylaşılmasını dikkate alarak uygulamanızın RAM kullanımının ölçümüdür. Sürecinize özgü olan tüm RAM sayfaları doğrudan PSS değerine katkıda bulunurken diğer süreçlerle paylaşılan sayfalar yalnızca paylaşım miktarıyla orantılı olarak PSS değerine katkıda bulunur. Örneğin, iki işlem arasında paylaşılan bir sayfa, her işlemin PSS'sine boyutunun yarısı kadar katkıda bulunur.
PSS ölçümünün bir özelliği, tüm işlemler tarafından kullanılan gerçek belleği belirlemek için tüm işlemler genelinde PSS'yi toplayabilmenizdir. Bu, PSS'nin bir sürecin gerçek RAM ağırlığı ve diğer süreçlerin RAM kullanımı ile toplam kullanılabilir RAM ile karşılaştırma için iyi bir ölçü olduğu anlamına gelir.
Örneğin, bir Nexus 5 cihazda Haritalar işleminin çıktısı aşağıdaki gibidir:
adb shell dumpsys meminfo -d com.google.android.apps.maps
Not: Çıktının bazı ayrıntıları platform sürümleri arasında farklılık gösterdiğinden, gördüğünüz bilgiler burada gösterilenlerden biraz farklı olabilir.
** MEMINFO in pid 18227 [com.google.android.apps.maps] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 10468 10408 0 0 20480 14462 6017
Dalvik Heap 34340 33816 0 0 62436 53883 8553
Dalvik Other 972 972 0 0
Stack 1144 1144 0 0
Gfx dev 35300 35300 0 0
Other dev 5 0 4 0
.so mmap 1943 504 188 0
.apk mmap 598 0 136 0
.ttf mmap 134 0 68 0
.dex mmap 3908 0 3904 0
.oat mmap 1344 0 56 0
.art mmap 2037 1784 28 0
Other mmap 30 4 0 0
EGL mtrack 73072 73072 0 0
GL mtrack 51044 51044 0 0
Unknown 185 184 0 0
TOTAL 216524 208232 4384 0 82916 68345 14570
Dalvik Details
.Heap 6568 6568 0 0
.LOS 24771 24404 0 0
.GC 500 500 0 0
.JITCache 428 428 0 0
.Zygote 1093 936 0 0
.NonMoving 1908 1908 0 0
.IndirectRef 44 44 0 0
Objects
Views: 90 ViewRootImpl: 1
AppContexts: 4 Activities: 1
Assets: 2 AssetManagers: 2
Local Binders: 21 Proxy Binders: 28
Parcel memory: 18 Parcel count: 74
Death Recipients: 2 OpenSSL Sockets: 2
Gmail uygulamasının Dalvik'teki eski bir dumpsys:
** MEMINFO in pid 9953 [com.google.android.gm] **
Pss Pss Shared Private Shared Private Heap Heap Heap
Total Clean Dirty Dirty Clean Clean Size Alloc Free
------ ------ ------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 0 0 7800 7637(6) 126
Dalvik Heap 5110(3) 0 4136 4988(3) 0 0 9168 8958(6) 210
Dalvik Other 2850 0 2684 2772 0 0
Stack 36 0 8 36 0 0
Cursor 136 0 0 136 0 0
Ashmem 12 0 28 0 0 0
Other dev 380 0 24 376 0 4
.so mmap 5443(5) 1996 2584 2664(5) 5788 1996(5)
.apk mmap 235 32 0 0 1252 32
.ttf mmap 36 12 0 0 88 12
.dex mmap 3019(5) 2148 0 0 8936 2148(5)
Other mmap 107 0 8 8 324 68
Unknown 6994(4) 0 252 6992(4) 0 0
TOTAL 24358(1) 4188 9724 17972(2)16388 4260(2)16968 16595 336
Objects
Views: 426 ViewRootImpl: 3(8)
AppContexts: 6(7) Activities: 2(7)
Assets: 2 AssetManagers: 2
Local Binders: 64 Proxy Binders: 34
Death Recipients: 0
OpenSSL Sockets: 1
SQL
MEMORY_USED: 1739
PAGECACHE_OVERFLOW: 1164 MALLOC_SIZE: 62
Genel olarak yalnızca Pss Total ve Private Dirty sütunlarıyla ilgilenin.
Bazı durumlarda Private Clean ve Heap Alloc sütunları da ilginç veriler sağlar.
Aşağıda, gözlemlemeniz gereken farklı bellek ayırmaları hakkında daha fazla bilgi verilmektedir:
Dalvik Heap- Uygulamanızda Dalvik ayırmaları tarafından kullanılan RAM.
Pss TotalPSS tanımında açıklandığı gibi, süreçler arasında paylaşım ağırlığına göre ayarlanmış tüm Zygote ayırmalarını içerir.Private Dirtysayısı, yalnızca uygulamanızın yığınına ayrılan gerçek RAM'dir. Bu sayı, kendi ayırmalarınızdan ve uygulamanızın sürecini Zygote'tan ayırdıktan sonra değiştirilen tüm Zygote ayırma sayfalarından oluşur.Not:
Dalvik Otherbölümünün bulunduğu daha yeni platform sürümlerinde, Dalvik Heap içinPss TotalvePrivate Dirtysayıları, anında derleme (JIT) ve GC muhasebesi gibi Dalvik ek yükünü içermez. Daha eski sürümlerde ise tümüDalvikaltında birleştirilmiş olarak listelenir.Heap Alloc, Dalvik ve yerel bellek yığını ayırıcılarının uygulamanız için takip ettiği bellek miktarıdır. Bu değer, işleminiz Zygote'tan çatallandığı ve işleminizin diğer tüm işlemlerle paylaştığı ayırmaları içerdiği içinPss TotalvePrivate Dirtydeğerlerinden daha büyüktür. .so mmapve.dex mmap- Eşlenmiş
.so(yerel) ve.dex(Dalvik veya ART) kodu için kullanılan RAM.Pss Totalsayısı, uygulamalar arasında paylaşılan platform kodunu içerir.Private Clean, uygulamanızın kendi kodudur. Genellikle, gerçek haritalandırılmış boyut daha büyüktür. Buradaki RAM, yalnızca uygulama tarafından yürütülen kod için şu anda RAM'de olması gereken miktardır. Ancak.so mmap, son adresine yüklendiğinde yerel kodda yapılan düzeltmeler nedeniyle büyük bir özel kirli alana sahiptir. .oat mmap- Bu, kod resmi tarafından kullanılan RAM miktarıdır. Bu, birden fazla uygulama tarafından en çok tercih edilen önceden yüklenmiş sınıflara dayanır. Bu resim tüm uygulamalarda paylaşılır ve belirli uygulamalardan etkilenmez.
.art mmap- Bu, yığın görüntüsü tarafından kullanılan RAM miktarıdır. Bu, birden fazla uygulama tarafından en çok tercih edilen önceden yüklenmiş sınıflara dayanır. Bu resim tüm uygulamalarda paylaşılır ve belirli uygulamalardan etkilenmez. ART görüntüsü
Objectörnek içerse de yığın boyutunuza dahil edilmez. .Heap(yalnızca-dişaretiyle)- Bu, uygulamanızın yığın belleği miktarıdır. Resim ve büyük nesne alanlarındaki nesneler hariç tutulur ancak Zygote alanı ve taşınmayan alan dahil edilir.
.LOS(yalnızca-dişaretiyle)- Bu, ART büyük nesne alanı tarafından kullanılan RAM miktarıdır. Buna Zygote büyük nesneleri dahildir. Büyük nesneler, 12 KB'tan büyük tüm temel dizi ayırmalarıdır.
.GC(yalnızca-dişaretiyle)- Bu, atık toplama işlemine ilişkin genel gider maliyetidir. Bu ek yükü azaltmanın bir yolu yoktur.
.JITCache(yalnızca-dişaretiyle)- Bu, JIT verileri ve kod önbellekleri tarafından kullanılan bellek miktarıdır. Genellikle bu değer sıfırdır. Bunun nedeni, tüm uygulamaların yükleme sırasında derlenmesidir.
.Zygote(yalnızca-dişaretiyle)- Bu, Zygote alanı tarafından kullanılan bellek miktarıdır. Zygote alanı, cihaz başlatılırken oluşturulur ve hiçbir zaman ayrılmaz.
.NonMoving(yalnızca-dişaretiyle)- Bu, ART'nin taşınmayan alanı tarafından kullanılan RAM miktarıdır. Taşınmayan alan, alanlar ve yöntemler gibi özel taşınamayan nesneler içerir. Uygulamanızda daha az alan ve yöntem kullanarak bu bölümü küçültebilirsiniz.
.IndirectRef(yalnızca-dişaretiyle)- Bu, ART dolaylı referans tabloları tarafından kullanılan RAM miktarıdır. Bu miktar genellikle küçüktür ancak çok yüksekse kullanılan yerel ve genel JNI referanslarının sayısını azaltarak bu miktarı düşürebilirsiniz.
Unknown- Sistemin diğer daha spesifik öğelerden birine sınıflandıramadığı tüm RAM sayfaları. Şu anda bu, çoğunlukla yerel ayırmaları içerir. Bu ayırmalar, Adres Alanı Düzeni Rastgeleleştirme (ASLR) nedeniyle bu veriler toplanırken araç tarafından tanımlanamaz. Dalvik yığını gibi,
Pss TotaliçinUnknown, Zygote ile paylaşımı dikkate alır vePrivate Dirtyyalnızca uygulamanıza ayrılmış bilinmeyen RAM'dir. TOTAL- İşleminiz tarafından kullanılan toplam orantılı küme boyutu (PSS) RAM. Bu değer, üstündeki tüm PSS alanlarının toplamıdır. Bu değer, işleminizin genel bellek ağırlığını gösterir. Bu değer, diğer işlemlerle ve toplam kullanılabilir RAM ile doğrudan karşılaştırılabilir.
Private DirtyvePrivate Clean, işleminizdeki toplam tahsislerdir ve diğer işlemlerle paylaşılmaz. İşleminiz sonlandırıldığında bu ayırmalardan gelen tüm RAM sisteme geri verilir.Private Clean, işleminiz yok edilmeden önce de sayfa dışına çıkarılabilir ve serbest bırakılabilir ancakPrivate Dirtyyalnızca işlem yok edildiğinde serbest bırakılır.Kirli RAM, değiştirilmiş ve etkin RAM'de tutulan, zRAM'e sıkıştırılmış veya depolama alanına geri yazılmış sayfalardır. Temiz RAM, kalıcı bir dosyadan eşlenmiş olan (ör. yürütülen kod) ve bir süredir kullanılmıyorsa disk belleğine alınabilen sayfalardır.
ViewRootImpl- İşleminizde etkin olan kök görünümlerin sayısı. Her kök görünüm bir pencereyle ilişkilendirilir. Bu nedenle, iletişim kutularını veya diğer pencereleri içeren bellek sızıntılarını belirlemenize yardımcı olabilir.
AppContextsveActivities- İşleminizde şu anda bulunan
ContextveActivitynesnelerinin sayısı. Bu, üzerinde statik referanslar olduğu için çöp toplama işlemi yapılamayan ve yaygın olan sızdırılmışActivitynesneleri hızlıca belirlemenize yardımcı olabilir. Bu nesneler genellikle kendileriyle ilişkili birçok başka tahsis içerir. Bu nedenle, büyük bellek sızıntılarını izlemek için iyi bir yöntemdir.