dumpsys
è uno strumento che viene eseguito su dispositivi Android e che fornisce informazioni su
servizi di sistema. Chiama dumpsys
dalla riga di comando utilizzando il
Android Debug Bridge (ADB)
per ottenere un output diagnostico per tutti i servizi di sistema in esecuzione su un dispositivo connesso.
Questo output è in genere più dettagliato di quanto tu voglia, quindi utilizza la funzione
opzioni in questa pagina per ottenere output solo per i servizi di sistema
desiderato. In questa pagina viene inoltre descritto come utilizzare dumpsys
a scopo di lucro
attività comuni, come l'ispezione di ingressi, RAM, batteria o diagnostica di rete.
Sintassi
La sintassi generale per l'utilizzo di dumpsys
è la seguente:
adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]
Per ottenere un output diagnostico per
tutti i servizi di sistema per il dispositivo connesso, esegui adb shell dumpsys
.
In questo modo, però, vengono visualizzate molte più informazioni del solito. Per
più gestibile, specifica il servizio che vuoi esaminare includendo
nel comando. Ad esempio, il comando seguente fornisce dati di sistema per
componenti di input, come touchscreen o tastiere integrate:
adb shell dumpsys input
Per un elenco completo dei servizi di sistema che puoi usare con dumpsys
, usa la
seguente comando:
adb shell dumpsys -l
Opzioni della riga di comando
La seguente tabella elenca le opzioni disponibili quando si utilizza dumpsys
:
Opzione | Descrizione |
---|---|
-t timeout
|
Specifica il periodo di timeout in secondi. Se non specificato, il valore il valore predefinito è 10 secondi. |
--help
|
Stampa il testo della guida per lo strumento dumpsys .
|
-l
|
Restituisci come output un elenco completo dei servizi di sistema che puoi utilizzare con
dumpsys .
|
--skip services
|
Specifica il valore services che non vuoi includere l'output. |
service [arguments]
|
Specifica il valore service da generare. Alcuni servizi
potrebbe consentirti di superare la sezione facoltativa arguments. Per saperne di più
questi argomenti facoltativi, passa l'opzione -h con
servizio:
adb shell dumpsys procstats -h |
-c
|
Quando specifichi determinati servizi, aggiungi questa opzione per generare i dati in un formato ottimizzato per la macchina. |
-h
|
Per alcuni servizi, aggiungi questa opzione per visualizzare il testo della guida e ulteriori opzioni per quel servizio. |
Ispezionare la diagnostica degli ingressi
Se viene specificato il servizio input
, come mostrato nel comando seguente, viene eseguito il dump della classe
lo stato dei dispositivi di input del sistema, come tastiere e touchscreen,
l'elaborazione degli eventi di input.
adb shell dumpsys input
L'output varia in base alla versione di Android installata sul dispositivo dispositivo. Le seguenti sezioni descrivono il tipo di informazioni solitamente vedere.
Stato hub eventi
Di seguito è riportato un esempio di ciò che potresti vedere quando ispezioni Stato dell'hub eventi della diagnostica di input:
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 ...
Input dello stato del lettore
InputReader
è responsabile della decodifica degli eventi di input dal kernel. È
il dump dello stato mostra informazioni su come è configurato ciascun dispositivo di input
modifiche recenti allo stato, quali pressioni di tasti o tocchi sul
touch screen.
L'esempio seguente mostra l'output per un touchscreen. Prendi nota delle informazioni la risoluzione del dispositivo e i parametri di calibrazione in uso.
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
Al termine del dump dello stato del lettore di input, troverai alcune informazioni parametri di configurazione globali, ad esempio l'intervallo di tocco:
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
Inserisci lo stato del supervisore
InputDispatcher
è responsabile dell'invio degli eventi di input alle applicazioni.
Come mostrato nell'output di esempio che segue, il relativo dump dello stato mostra informazioni
quale finestra viene toccata, lo stato della coda di input, se si verifica un errore ANR
in corso e altre informazioni sull'evento di input:
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
Aspetti da controllare
Di seguito è riportato un elenco di aspetti da considerare durante l'ispezione dell'output
per il servizio input
:
Stato dell'hub eventi:
- Sono presenti tutti i dispositivi di input previsti.
- Ogni dispositivo di input ha un file di layout dei tasti e una mappa dei caratteri appropriati e il file di configurazione del dispositivo di input. Se i file sono mancanti o contengono di sintassi non vengono caricati.
- Ogni dispositivo di input è classificato correttamente. Le parti nella
Il campo
Classes
corrisponde ai flag inEventHub.h
, ad esempioINPUT_DEVICE_CLASS_TOUCH_MT
. - Il
BuiltInKeyboardId
è corretto. Se il dispositivo non hanno una tastiera integrata, l'ID deve essere-2
. Altrimenti, dovrebbe essere l'ID della tastiera integrata. - Se noti che
BuiltInKeyboardId
non è-2
ma dovrebbe esserlo. Manca una mappa dei caratteri chiave. per un tastierino con funzione speciale. Tastierino per funzioni speciali i dispositivi devono avere file di mappe con caratteri chiave contenenti solo la rigatype SPECIAL_FUNCTION
.
Input dello stato del lettore:
- Sono presenti tutti i dispositivi di input previsti.
- Ogni dispositivo di input è configurato correttamente. In particolare, verifica che il touchscreen e gli assi del joystick siano corretti.
Inserisci lo stato del supervisore:
- Tutti gli eventi di input vengono elaborati come previsto.
- Dopo aver toccato il touchscreen e aver eseguito
dumpsys
contemporaneamente, il La lineaTouchStates
identifica correttamente la finestra che stai toccando.
Testa le prestazioni dell'UI
La specifica del servizio gfxinfo
fornisce output con informazioni sulle prestazioni
relative ai frame dell'animazione che si verificano durante la fase di registrazione.
Il seguente comando utilizza gfxinfo
per raccogliere i dati sulle prestazioni dell'UI per un
nome del pacchetto specificato:
adb shell dumpsys gfxinfo package-name
Puoi anche includere l'opzione framestats
per fornire un'inquadratura ancora più dettagliata
informazioni sulla tempistica dei frame recenti, per consentirti di rintracciare ed eseguire il debug
risolvere i problemi in modo più preciso:
adb shell dumpsys gfxinfo package-name framestats
Per scoprire di più sull'utilizzo di gfxinfo
e framestats
per l'integrazione della UI
le misurazioni delle prestazioni nelle pratiche di test, consulta
Scrivere un Macrobenchmark.
Ispezionare la diagnostica di rete
La specifica del servizio netstats
consente di ottenere le statistiche sull'utilizzo della rete raccolte
dall'avvio del dispositivo precedente. Per restituire informazioni aggiuntive, ad esempio
informazioni dettagliate sull'ID utente unico (UID), includi l'opzione detail
,
che segue:
adb shell dumpsys netstats detail
L'output varia in base alla versione di Android installata sul dispositivo dispositivo. Le seguenti sezioni descrivono il tipo di informazioni solitamente vedere.
Interfacce attive e interfacce UID attive
Il seguente output di esempio elenca le interfacce attive e l'UID attivo interfacce del dispositivo connesso. Nella maggior parte dei casi, le informazioni per e le interfacce UID attive sono uguali.
Active interfaces: iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}] Active UID interfaces: iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
'Dev' e "Xt" statistica
Di seguito è riportato un output di esempio per la sezione Statistiche sviluppatore:
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
Statistiche UID
Di seguito è riportato un esempio di statistiche dettagliate per ogni UID:
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
Per trovare l'UID dell'app, esegui questo comando: adb shell dumpsys
package your-package-name
. Quindi cerca la riga con l'etichetta
userId
.
Ad esempio, per trovare l'utilizzo della rete per l'app "com.example.myapp", esegui la seguente comando:
adb shell dumpsys package com.example.myapp | grep userId
L'output dovrebbe essere simile al seguente:
userId=10007 gids=[3003, 1028, 1015]
Utilizzando il dump di esempio precedente, cerca le righe con uid=10007
. Due di questi
esistono linee: la prima indica una connessione mobile e la seconda
Connessione Wi-Fi. Sotto ogni riga, puoi vedere le seguenti informazioni:
ogni finestra di due ore, che bucketDuration
specifica in millisecondi:
-
set=DEFAULT
indica il primo piano utilizzo della rete, mentreset=BACKGROUND
indica in background.set=ALL
implica entrambi. -
tag=0x0
indica il tag socket associato al traffico. -
rxBytes
erxPackets
rappresentano i byte ricevuti e pacchetti ricevuti nell'intervallo di tempo corrispondente. -
txBytes
etxPackets
rappresentano inviati byte (trasmessi) e pacchetti inviati nell'intervallo di tempo corrispondente.
Ispezionare la diagnostica della batteria
La specifica del servizio batterystats
genera dati statistici
sull'utilizzo della batteria su un dispositivo, organizzati per ID utente unico (UID). Per ulteriori informazioni
per utilizzare dumpsys
per testare l'app per Sospensione e Standby delle app, vedi
Test con sospensione e standby delle app.
Il comando per batterystats
è il seguente:
adb shell dumpsys batterystats options
Per visualizzare un elenco delle opzioni aggiuntive disponibili per batterystats
, includi:
Opzione -h
. L'esempio seguente restituisce le statistiche sull'utilizzo della batteria per un
pacchetto dell'app specificato dall'ultima ricarica del dispositivo:
adb shell dumpsys batterystats --charged package-name
L'output in genere include quanto segue:
- Cronologia di eventi relativi alla batteria
- Statistiche globali per il dispositivo
- Consumo approssimativo di energia per UID e componente di sistema
- Millisecondi mobile per app per pacchetto
- Statistiche aggregate UID di sistema
- Statistiche aggregate UID app
Per scoprire di più sull'utilizzo di batterystats
e sulla generazione di una visualizzazione HTML di
l'output, il che rende più facile comprendere e diagnosticare
problemi, leggi Utilizzo della batteria del profilo con Batterystats e Cronologia della batteria.
Ispeziona un output ottimizzato per il machine learning
Puoi generare un output batterystats
in formato CSV leggibile dal computer utilizzando
il seguente comando:
adb shell dumpsys batterystats --checkin
Di seguito è riportato un esempio dell'output:
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 ...
Le osservazioni sull'utilizzo della batteria possono essere per UID o a livello di sistema. I dati sono selezionati per inclusione basata sulla sua utilità nell'analisi delle prestazioni della batteria. Ogni riga rappresenta un'osservazione, con i seguenti elementi:
- Un numero intero segnaposto
- L'ID utente associato all'osservazione
- La modalità di aggregazione:
i
per informazioni non legate allo stato addebitato/non addebitato.l
per--charged
(utilizzo dall'ultima ricarica).u
per--unplugged
(utilizzo dall'ultimo scollegamento). Deprecato in Android 5.1.1.
- Identificatore di sezione, che determina come interpretare i valori successivi della riga.
Nella tabella seguente vengono descritti i vari identificatori di sezione che possono essere visualizzati:
Identificatore della sezione | Descrizione | Campi rimanenti |
---|---|---|
|
Versione |
|
|
UID |
|
|
APK |
|
|
Procedura |
|
|
Sensore |
|
|
Vibratore |
|
|
Primo piano |
|
|
Ora stato |
|
|
Blocco riattivazione |
|
|
Sincronizza |
|
|
Job |
|
|
Wakelock del kernel |
|
|
Motivo sveglia |
|
|
Rete |
|
|
Attività degli utenti |
|
|
Batteria |
|
|
Scarica batteria |
|
|
Livello della batteria |
|
|
Wi-Fi |
|
|
Wi-Fi globale |
|
|
Bluetooth globale |
|
|
Varie |
|
|
Rete globale |
|
|
Luminosità schermo |
|
|
Tempo di scansione del segnale |
|
|
Tempo di intensità del segnale |
|
|
Numero di intensità del segnale |
|
|
Tempo di connessione dati |
|
|
Numero di connessioni dati |
|
|
Ora stato Wi-Fi |
|
|
Numero stato Wi-Fi |
|
|
Ora stato del dispositivo Wi-Fi |
|
|
Numero di stati dei dispositivi Wi-Fi |
|
|
Tempo di intensità del segnale Wi-Fi |
|
|
Numero di intensità del segnale Wi-Fi |
|
|
Ora stato Bluetooth |
|
|
Conteggio stati Bluetooth |
|
|
Riepilogo consumo energetico |
|
|
Articolo per uso energetico |
|
|
Passo di scarico |
|
|
Passo di ricarica |
|
|
Tempo di scarica rimanente |
|
|
Tempo di ricarica restante |
|
Nota: prima di Android 6.0, il consumo di batteria per
Radio Bluetooth, radio cellulare e Wi-Fi monitorati in m
(vari)
categoria della sezione. In Android 6.0 e versioni successive, il consumo di batteria di questi componenti è
monitorato nella sezione pwi
(Articolo per uso avanzato) con singole etichette
(wifi
, blue
, cell
) per ogni componente.
Visualizza allocazioni della memoria
Puoi controllare l'utilizzo della memoria da parte della tua app in uno dei due modi seguenti: nell'arco di un periodo di
volta con procstats
o in un determinato momento utilizzando meminfo
.
Le seguenti sezioni spiegano come utilizzare entrambi i metodi.
procstat
procstats
ti consente di vedere il comportamento della tua app nel tempo,
inclusa la durata dell'esecuzione in background e la quantità di memoria utilizzata durante
in quel momento. Ti aiuta a individuare rapidamente le inefficienze e i comportamenti anomali nel tuo
ad esempio perdite di memoria, che possono influire sulle sue prestazioni, soprattutto
in esecuzione su dispositivi con memoria ridotta. Il suo dump dello stato mostra le statistiche
dell'applicazione, come la dimensione del set proporzionale (PSS), la dimensione del set univoco (USS) e
dimensioni del set residente (RSS).
Per ottenere le statistiche sull'utilizzo della memoria dell'applicazione nelle ultime tre ore, in leggibile da una persona, esegui questo comando:
adb shell dumpsys procstats --hours 3
Come mostrato nell'esempio seguente, l'output mostra la percentuale
del tempo in cui l'applicazione era in esecuzione e i formati PSS, USS e RSS
minPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS/minRSS-avgRSS-maxRSS
in più
il numero di campioni.
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
Puoi registrare un'istantanea di come viene conservata la memoria dell'app tra i diversi tipi di allocazione della RAM, seguente comando:
adb shell dumpsys meminfo package_name|pid [-d]
Il flag -d
mostra ulteriori informazioni relative all'utilizzo della memoria di Dalvik e di ART.
L'output elenca tutte le allocazioni attuali dell'app, misurate in kilobyte.
Quando esamini queste informazioni, dovresti avere familiarità con i seguenti tipi di allocazione:
- RAM privata (pulita e disordinata)
- Si tratta di una memoria utilizzata solo dal tuo processo. Questo è il modulo della RAM che il sistema può recuperare quando il processo della tua app viene eliminato. In genere, la parte più importante di questo processo è la RAM sporca privata, che è la più costosa perché viene utilizzata solo dal tuo processo e dato che contenuti esistono solo nella RAM, quindi non possono essere impaginati allo spazio di archiviazione, in quanto Android usa lo scambio. Tutte le allocazioni di Dalvik e di heap nativi che effettui sono dirty private di RAM. Le allocazioni di Dalvik e native che condividi con il processo Zygote vengono condivise RAM sporca.
- Dimensioni del set proporzionali (PSS)
- Si tratta di una misurazione dell'utilizzo della RAM da parte della tua app che tiene conto della condivisione pagine tra i processi. Eventuali pagine RAM univoche direttamente per il processo contribuiscono al valore PSS, mentre le pagine condivise con altri processi contribuiscono al valore PSS solo in proporzione alla quantità di condivisione. Per Ad esempio, una pagina condivisa tra due processi contribuisce a metà delle sue dimensioni PSS di ogni processo.
Una caratteristica della misurazione PSS è che è possibile sommarla per tutti i processi per determinare la memoria effettiva utilizzata da tutti i processi. Questo significa che il PSS è una buona misura per il peso effettivo della RAM di un processo e per confronto con l'uso della RAM di altri processi e il totale di RAM.
Ad esempio, il seguente è l'output per il processo di Maps su un Nexus 5 dispositivo:
adb shell dumpsys meminfo com.google.android.apps.maps -d
Nota: le informazioni visualizzate potrebbero variare leggermente da è mostrato qui, perché alcuni dettagli dell'output variano in base alla piattaforma e versioni successive.
** 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
Ecco una versione precedente di dumpsys
su Dalvik dell'app Gmail:
** 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
In generale, considera solo le colonne Pss Total
e Private Dirty
.
In alcuni casi, le colonne Private Clean
e Heap Alloc
forniscono dati interessanti.
Di seguito vengono fornite ulteriori informazioni sulle diverse allocazioni della memoria da osservare:
Dalvik Heap
- La RAM utilizzata dalle allocazioni di Dalvik nella tua app.
Pss Total
include tutte le allocazioni di Zygote, ponderate in base alla loro condivisione tra i processi, dato che descritti nella definizione del PSS. Il numeroPrivate Dirty
è RAM effettiva impegnata solo nell'heap dell'app, composta dalle tue allocazioni ed eventuali pagine di allocazione Zygote che sono state modificate dal fork della tua app processo da Zygote.Nota: sulle versioni più recenti della piattaforma con
Dalvik Other
, i numeriPss Total
ePrivate Dirty
per Dalvik Heap non includono l'overhead di Dalvik, ad esempio la compilazione just-in-time (JIT) e la gestione dei dati di GC, mentre le versioni precedenti elencano inDalvik
.Heap Alloc
è la quantità di memoria che Dalvik e gli allocatori di heap nativi monitorano per la tua app. Questo valore è maggiore diPss Total
ePrivate Dirty
perché la procedura è stata creato da Zygote e include le allocazioni che il processo condivide con tutti gli altri. .so mmap
e.dex mmap
- La RAM utilizzata per
.so
(nativa) e.dex
(Dalvik o ART). Il numero diPss Total
include il codice della piattaforma condiviso tra le app.Private Clean
è il codice della tua app. In genere, le dimensioni effettive mappate sono maggiori. Qui la RAM è solo ciò che attualmente deve essere nella RAM per il codice che è stato eseguito dell'app. Tuttavia,.so mmap
ha un numero elevato di query "sporche" private, a causa di problemi al codice nativo quando è stato caricato nell'indirizzo finale. .oat mmap
- Questa è la quantità di RAM utilizzata dall'immagine del codice. Si basa sul classi precaricate comunemente usate da più app. Questa immagine è condivisa in tutte le app e non è interessato da app specifiche.
.art mmap
- Questa è la quantità di RAM utilizzata dall'immagine heap. Si basa sul
classi precaricate comunemente usate da più app. Questa immagine è condivisa tra
tutte le app e non è interessato da app specifiche. Anche se l'immagine ART
contiene
Object
non viene conteggiato ai fini della dimensione heap. .Heap
(solo con flag-d
)- Si tratta della quantità di memoria heap per la tua app. Vengono esclusi gli oggetti nel e gli spazi degli oggetti di grandi dimensioni, ma includono lo spazio Zygote e spazio.
.LOS
(solo con flag-d
)- Si tratta della quantità di RAM utilizzata dallo spazio degli oggetti di grandi dimensioni ART. Sono inclusi Oggetti di grandi dimensioni Zygote. Gli oggetti di grandi dimensioni sono tutte allocazioni di array primitive più grandi di dimensioni superiori a 12 kB.
.GC
(solo con flag-d
)- Si tratta del costo generale della garbage collection. Non esiste per ridurre i costi generali.
.JITCache
(solo con flag-d
)- Si tratta della quantità di memoria utilizzata dai dati JIT e dalle cache di codice. In genere, questo valore è zero, perché tutte le app vengono compilate al momento dell'installazione nel tempo.
.Zygote
(solo con flag-d
)- Questa è la quantità di memoria utilizzata dallo spazio Zygote. Lo spazio di Zygote è vengono creati durante l'avvio del dispositivo e non vengono mai allocati.
.NonMoving
(solo con flag-d
)- Si tratta della quantità di RAM utilizzata dallo spazio non mobile ART. L'immagine non si sposta contiene speciali oggetti non spostabili come campi e metodi. Puoi ridurre questa sezione usando meno campi e metodi nella tua app. di Gemini Advanced.
.IndirectRef
(solo con flag-d
)- Questa è la quantità di RAM utilizzata dalle tabelle di riferimento indirette ART. Di solito questo importo è basso, ma se è troppo alto, potresti riuscire a ridurre il numero di riferimenti JNI locali e globali utilizzati.
Unknown
- Qualsiasi pagina RAM che il sistema non è riuscito a classificare in una delle altre
elementi specifici. Al momento contiene allocazioni native, che non possono
Essere identificate dallo strumento durante la raccolta di questi dati grazie al layout dello spazio degli indirizzi
Randomizzazione (ASLR). Come il mucchio Dalvik, il
Pss Total
diUnknown
prende in considerazione la condivisione con Zygote ePrivate Dirty
è una RAM sconosciuta dedicata solo alla tua app. TOTAL
- La RAM totale del set proporzionale (PSS) utilizzata dal processo. Questo è il
somma di tutti i campi PSS precedenti. Indica il peso complessivo della memoria del tuo
di un processo, che può essere confrontato direttamente con altri processi e il totale
di RAM disponibile.
Private Dirty
ePrivate Clean
sono il totale allocazioni all'interno del processo, che non vengono condivise con altri processi. Quando il processo viene eliminato, viene rilasciata tutta la RAM di queste allocazioni al sistema.Private Clean
può anche essere impaginato e rilasciato prima che il processo venga distrutto, maPrivate Dirty
è rilasciate al momento dell'eliminazione del processo.La RAM sporca è pagine che sono state modificate e quindi devono rimanere sulla RAM perché e niente scambio. Si tratta di pagine mappate da un file permanente, come al momento dell'esecuzione del codice. Se non viene usato per un certo periodo, il formato può essere con pagine impaginate.
ViewRootImpl
- Il numero di visualizzazioni principali attive nel tuo processo. Ogni vista principale associate a una finestra, questo può aiutarti a identificare le perdite di memoria che o in altre finestre di dialogo.
AppContexts
eActivities
- Il numero di app
Context
eActivity
attualmente presenti nel processo. Questo può aiutarti a velocizzare Identifica gli oggettiActivity
divulgati che non possono essere garbage collection a causa di riferimenti statici su di essi, cosa che è comune. Questi oggetti hanno spesso molti ad altre allocazioni associate, il che le rende un buon modo per monitorare grandi perdite di memoria. di Gemini Advanced.