Home | History | Annotate | Download | only in source
      1 <html devsite>
      2   <head>
      3     <title>Reading Bug Reports</title>
      4     <meta name="project_path" value="/_project.yaml" />
      5     <meta name="book_path" value="/_book.yaml" />
      6   </head>
      7   <body>
      8   <!--
      9       Copyright 2017 The Android Open Source Project
     10 
     11       Licensed under the Apache License, Version 2.0 (the "License");
     12       you may not use this file except in compliance with the License.
     13       You may obtain a copy of the License at
     14 
     15           http://www.apache.org/licenses/LICENSE-2.0
     16 
     17       Unless required by applicable law or agreed to in writing, software
     18       distributed under the License is distributed on an "AS IS" BASIS,
     19       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     20       See the License for the specific language governing permissions and
     21       limitations under the License.
     22   -->
     23 
     24 
     25 
     26 <p>Bugs are a reality in any type of development&#8212;and bug reports are
     27 critical to identifying and solving problems. All versions of Android support
     28 capturing bug reports with <a href="http://developer.android.com/tools/help/adb.html">Android
     29 Debug Bridge (adb)</a>; Android versions 4.2 and higher support a
     30 <a href="http://developer.android.com/tools/device.html#developer-device-options">Developer
     31 Option</a> for taking bug reports and sharing via email, Drive, etc.</p>
     32 
     33 <p>Android bug reports contain <code>dumpsys</code>, <code>dumpstate</code>, and
     34 <code>logcat</code> data in text (.txt) format, enabling you to easily search
     35 for specific content. The following sections detail bug report components,
     36 describe common problems, and give helpful tips and <code>grep</code> commands
     37 for finding logs associated with those bugs. Most sections also include examples
     38 for <code>grep</code> command and output and/or <code>dumpsys</code> output.</p>
     39 
     40 <h2 id="logcat">Logcat</h2>
     41 <p>The <code>logcat</code> log is a string-based dump of all <code>logcat</code>
     42 information. The <strong>system</strong> part is reserved for the framework and
     43 has a longer history than <strong>main</strong> which contains everything else.
     44 Each line starts with <code>timestamp PID TID log-level</code>.</p>
     45 
     46   <section class="expandable">
     47     <h4 class="showalways">Show example</h4>
     48     <p><pre>------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
     49 --------- beginning of system
     50 <i>Blah</i>
     51 <i>Blah</i>
     52 <i>Blah</i>
     53 
     54 --------- beginning of main
     55 <i>Blah </i>
     56 <i>Blah</i>
     57 <i>Blah</i></pre></p>
     58   </section>
     59 
     60 <h3 id="event-log">Viewing the event log</h3>
     61 <p>This log contains string representations of binary-formatted log messages. It
     62 is less noisy than the <code>logcat</code> log but also a little harder to read.
     63 When viewing event logs, you can search this section for specific process ID
     64 (PID) to see what a process has been doing. The basic format is:
     65 <code>timestamp PID TID log-level log-tag tag-values</code>.</p>
     66 
     67 <p>Log levels include the following:</p>
     68 <ul>
     69 <li>V: verbose</li>
     70 <li>D: debug</li>
     71 <li>I: information</li>
     72 <li>W: warning</li>
     73 <li>E: error</li>
     74 </ul>
     75 
     76   <section class="expandable">
     77     <h4 class="showalways">Show example</h4>
     78     <p><pre>------ EVENT LOG (logcat -b events -v threadtime -d *:v) ------
     79 09-28 13:47:34.179   785  5113 I am_proc_bound: [0,23054,com.google.android.gms.unstable]
     80 09-28 13:47:34.777   785  1975 I am_proc_start: [0,23134,10032,com.android.chrome,broadcast,com.android.chrome/org.chromium.chrome.browser.precache.PrecacheServiceLauncher]
     81 09-28 13:47:34.806   785  2764 I am_proc_bound: [0,23134,com.android.chrome]
     82 ...</pre></p>
     83   </section>
     84 <p>&nbsp;</p>
     85 <p>For other useful event log tags, refer to
     86 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/EventLogTags.logtags">/services/core/java/com/android/server/EventLogTags.logtags</a>.</p>
     87 
     88 <h2 id="anrs-deadlocks">ANRs and deadlocks</h2>
     89 <p>Bugreports can help you identify what's causing
     90 <a href="http://developer.android.com/training/articles/perf-anr.html">Application
     91 Not Responding (ANR)</a> errors and deadlock events.</p>
     92 
     93 <h3 id="determine-anr-app">Identifying unresponsive apps</h3>
     94 <p>When an application does not respond within a certain time, usually due to a
     95 blocked or busy main thread, the system kills the process and dumps the stack to
     96 <code>/data/anr</code>. To discover the culprit behind an ANR, grep for
     97 <code>am_anr</code> in the binary event log.</p>
     98 
     99   <section class="expandable">
    100     <h4 class="showalways">Show example</h4>
    101     <p><pre>grep "am_anr" bugreport-2015-10-01-18-13-48.txt
    102 10-01 18:12:49.599  4600  4614 I am_anr  : [0,29761,com.google.android.youtube,953695941,executing service com.google.android.youtube/com.google.android.apps.youtube.app.offline.transfer.OfflineTransferService]
    103 10-01 18:14:10.211  4600  4614 I am_anr  : [0,30363,com.google.android.apps.plus,953728580,executing service com.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService]</pre></p>
    104   </section>
    105 
    106 <p></p>
    107 <p>You can also grep for <code>ANR in</code> in the <code>logcat</code> log,
    108 which contains more information about what was using CPU at the time of the ANR.
    109 </p>
    110 
    111   <section class="expandable">
    112     <h4 class="showalways">Show example</h4>
    113     <p><pre>grep "ANR in" bugreport-2015-10-01-18-13-48.txt
    114 10-01 18:13:11.984  4600  4614 E ActivityManager: ANR in com.google.android.youtube
    115 10-01 18:14:31.720  4600  4614 E ActivityManager: ANR in com.google.android.apps.plus
    116 10-01 18:14:31.720  4600  4614 E ActivityManager: PID: 30363
    117 10-01 18:14:31.720  4600  4614 E ActivityManager: Reason: executing service com.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService
    118 10-01 18:14:31.720  4600  4614 E ActivityManager: Load: 35.27 / 23.9 / 16.18
    119 10-01 18:14:31.720  4600  4614 E ActivityManager: CPU usage from 16ms to 21868ms later:
    120 10-01 18:14:31.720  4600  4614 E ActivityManager:   74% 3361/mm-qcamera-daemon: 62% user + 12% kernel / faults: 15276 minor 10 major
    121 10-01 18:14:31.720  4600  4614 E ActivityManager:   41% 4600/system_server: 18% user + 23% kernel / faults: 18597 minor 309 major
    122 10-01 18:14:31.720  4600  4614 E ActivityManager:   32% 27420/com.google.android.GoogleCamera: 24% user + 7.8% kernel / faults: 48374 minor 338 major
    123 10-01 18:14:31.720  4600  4614 E ActivityManager:   16% 130/kswapd0: 0% user + 16% kernel
    124 10-01 18:14:31.720  4600  4614 E ActivityManager:   15% 283/mmcqd/0: 0% user + 15% kernel
    125 ...
    126 10-01 18:14:31.720  4600  4614 E ActivityManager:   0.1% 27248/irq/503-synapti: 0%
    127 10-01 18:14:31.721  4600  4614 I ActivityManager: Killing 30363:com.google.android.apps.plus/u0a206 (adj 0): bg anr</pre></p>
    128   </section>
    129 
    130 <h3 id="find-stack-traces">Finding stack traces</h3>
    131 <p>You can often find stack traces that correspond to an ANR. Make sure the
    132 timestamp and PID on the VM traces match the ANR you are investigating, then
    133 check the main thread of the process. Keep in mind:</p>
    134 <ul>
    135 <li>The main thread tells you only what the thread was doing at the time of the
    136 ANR, which may or may not correspond to the true cause of the ANR. (The stack in
    137 the bug report may be innocent; something else may have been stuck for a long
    138 time&#8212;but not quite long enough to ANR&#8212;before becoming unstuck.)
    139 </li>
    140 <li>More than one set of stack traces (<code>VM TRACES JUST NOW</code> and
    141 <code>VM TRACES AT LAST ANR</code>) might exist. Make sure you are viewing the
    142 correct section.</li>
    143 </ul>
    144 
    145   <section class="expandable">
    146     <h4 class="showalways">Show example</h4>
    147     <p><pre>------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2015-10-01 18:14:41) ------
    148 
    149 ----- pid 30363 at 2015-10-01 18:14:11 -----
    150 Cmd line: com.google.android.apps.plus
    151 Build fingerprint: 'google/angler/angler:6.0/MDA89D/2294819:userdebug/dev-keys'
    152 ABI: 'arm'
    153 Build type: optimized
    154 Zygote loaded classes=3978 post zygote classes=27
    155 Intern table: 45068 strong; 21 weak
    156 JNI: CheckJNI is off; globals=283 (plus 360 weak)
    157 Libraries: /system/lib/libandroid.so /system/lib/libcompiler_rt.so /system/lib/libjavacrypto.so /system/lib/libjnigraphics.so /system/lib/libmedia_jni.so /system/lib/libwebviewchromium_loader.so libjavacore.so (7)
    158 Heap: 29% free, 21MB/30MB; 32251 objects
    159 Dumping cumulative Gc timings
    160 Total number of allocations 32251
    161 Total bytes allocated 21MB
    162 Total bytes freed 0B
    163 Free memory 9MB
    164 Free memory until GC 9MB
    165 Free memory until OOME 490MB
    166 Total memory 30MB
    167 Max memory 512MB
    168 Zygote space size 1260KB
    169 Total mutator paused time: 0
    170 Total time waiting for GC to complete: 0
    171 Total GC count: 0
    172 Total GC time: 0
    173 Total blocking GC count: 0
    174 Total blocking GC time: 0
    175 
    176 suspend all histogram:  Sum: 119.728ms 99% C.I. 0.010ms-107.765ms Avg: 5.442ms Max: 119.562ms
    177 DALVIK THREADS (12):
    178 "Signal Catcher" daemon prio=5 tid=2 Runnable
    179   | group="system" sCount=0 dsCount=0 obj=0x12c400a0 self=0xef460000
    180   | sysTid=30368 nice=0 cgrp=default sched=0/0 handle=0xf4a69930
    181   | state=R schedstat=( 9021773 5500523 26 ) utm=0 stm=0 core=1 HZ=100
    182   | stack=0xf496d000-0xf496f000 stackSize=1014KB
    183   | held mutexes= "mutator lock"(shared held)
    184   native: #00 pc 0035a217  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&, int, char const*, art::ArtMethod*, void*)+126)
    185   native: #01 pc 0033b03b  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&) const+138)
    186   native: #02 pc 00344701  /system/lib/libart.so (art::DumpCheckpoint::Run(art::Thread*)+424)
    187   native: #03 pc 00345265  /system/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure*)+200)
    188   native: #04 pc 00345769  /system/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+124)
    189   native: #05 pc 00345e51  /system/lib/libart.so (art::ThreadList::DumpForSigQuit(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+312)
    190   native: #06 pc 0031f829  /system/lib/libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+68)
    191   native: #07 pc 00326831  /system/lib/libart.so (art::SignalCatcher::HandleSigQuit()+896)
    192   native: #08 pc 003270a1  /system/lib/libart.so (art::SignalCatcher::Run(void*)+324)
    193   native: #09 pc 0003f813  /system/lib/libc.so (__pthread_start(void*)+30)
    194   native: #10 pc 00019f75  /system/lib/libc.so (__start_thread+6)
    195   (no managed stack frames)
    196 
    197 "main" prio=5 tid=1 Suspended
    198   | group="main" sCount=1 dsCount=0 obj=0x747552a0 self=0xf5376500
    199   | sysTid=30363 nice=0 cgrp=default sched=0/0 handle=0xf74feb34
    200   | state=S schedstat=( 331107086 164153349 851 ) utm=6 stm=27 core=3 HZ=100
    201   | stack=0xff00f000-0xff011000 stackSize=8MB
    202   | held mutexes=
    203   kernel: __switch_to+0x7c/0x88
    204   kernel: futex_wait_queue_me+0xd4/0x130
    205   kernel: futex_wait+0xf0/0x1f4
    206   kernel: do_futex+0xcc/0x8f4
    207   kernel: compat_SyS_futex+0xd0/0x14c
    208   kernel: cpu_switch_to+0x48/0x4c
    209   native: #00 pc 000175e8  /system/lib/libc.so (syscall+28)
    210   native: #01 pc 000f5ced  /system/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+80)
    211   native: #02 pc 00335353  /system/lib/libart.so (art::Thread::FullSuspendCheck()+838)
    212   native: #03 pc 0011d3a7  /system/lib/libart.so (art::ClassLinker::LoadClassMembers(art::Thread*, art::DexFile const&, unsigned char const*, art::Handle&lt;art::mirror::Class&gt;, art::OatFile::OatClass const*)+746)
    213   native: #04 pc 0011d81d  /system/lib/libart.so (art::ClassLinker::LoadClass(art::Thread*, art::DexFile const&, art::DexFile::ClassDef const&, art::Handle&lt;art::mirror::Class&gt;)+88)
    214   native: #05 pc 00132059  /system/lib/libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned int, art::Handle&lt;art::mirror::ClassLoader&gt;, art::DexFile const&, art::DexFile::ClassDef const&)+320)
    215   native: #06 pc 001326c1  /system/lib/libart.so (art::ClassLinker::FindClassInPathClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned int, art::Handle&lt;art::mirror::ClassLoader&gt;, art::mirror::Class**)+688)
    216   native: #07 pc 002cb1a1  /system/lib/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+264)
    217   native: #08 pc 002847fd  /data/dalvik-cache/arm/system@framework (a] boot.oat (Java_java_lang_VMClassLoader_findLoadedClass__Ljava_lang_ClassLoader_2Ljava_lang_String_2+112)
    218   at java.lang.VMClassLoader.findLoadedClass!(Native method)
    219   at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:362)
    220   at java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    221   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    222   at android.app.ActivityThread.installProvider(ActivityThread.java:5141)
    223   at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
    224   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
    225   at android.app.ActivityThread.-wrap1(ActivityThread.java:-1)
    226   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
    227   at android.os.Handler.dispatchMessage(Handler.java:102)
    228   at android.os.Looper.loop(Looper.java:148)
    229   at android.app.ActivityThread.main(ActivityThread.java:5417)
    230   at java.lang.reflect.Method.invoke!(Native method)
    231   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    232   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    233 
    234   ...
    235 <i>  Stacks for other threads in this process follow</i>
    236   ...</pre></p>
    237   </section>
    238 
    239 <h3 id="deadlocks">Finding deadlocks</h3>
    240 <p>Deadlocks often first appear as ANRs because threads are getting stuck. If
    241 the deadlock hits the system server, the watchdog will eventually kill it,
    242 leading to an entry in the log similar to:
    243 <code>WATCHDOG KILLING SYSTEM PROCESS</code>. From the user perspective, the
    244 device reboots, although technically this is a runtime restart rather than a
    245 true reboot.</p>
    246 
    247 <ul>
    248 <li>In a <strong>runtime</strong> restart, the system server dies and is
    249 restarted; the user sees the device return to the boot animation.</li>
    250 <li>In a <strong>reboot</strong>, the kernel has crashed; the user sees the
    251 device return to the Google boot logo.</li>
    252 </ul>
    253 
    254 <p>To find deadlocks, check the VM traces sections for a pattern of thread A
    255 waiting on something held by thread B, which in turn is waiting on something
    256 held by thread A.</p>
    257 
    258   <section class="expandable">
    259     <h4 class="showalways">Show example</h4>
    260     <p><pre>"Binder_B" prio=5 tid=73 Blocked
    261   | group="main" sCount=1 dsCount=0 obj=0x13faa0a0 self=0x95e24800
    262   | sysTid=2016 nice=0 cgrp=default sched=0/0 handle=0x8b68d930
    263   | state=S schedstat=( 9351576559 4141431119 16920 ) utm=819 stm=116 core=1 HZ=100
    264   | stack=0x8b591000-0x8b593000 stackSize=1014KB
    265   | held mutexes=
    266   at com.android.server.pm.UserManagerService.exists(UserManagerService.java:387)
    267   - waiting to lock &lt;0x025f9b02&gt; (a android.util.ArrayMap) held by thread 20
    268   at com.android.server.pm.PackageManagerService.getApplicationInfo(PackageManagerService.java:2848)
    269   at com.android.server.AppOpsService.getOpsRawLocked(AppOpsService.java:881)
    270   at com.android.server.AppOpsService.getOpsLocked(AppOpsService.java:856)
    271   at com.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:719)
    272   - locked &lt;0x0231885a&gt; (a com.android.server.AppOpsService)
    273   at com.android.server.AppOpsService.noteOperation(AppOpsService.java:713)
    274   at com.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260)
    275   at com.android.server.MountService$MountServiceInternalImpl.getExternalStorageMountMode(MountService.java:3416)
    276   at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3228)
    277   at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3170)
    278   at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3059)
    279   at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1070)
    280   - locked &lt;0x044d166f&gt; (a com.android.server.am.ActivityManagerService)
    281   at com.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:16950)
    282   at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:494)
    283   at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2432)
    284   at android.os.Binder.execTransact(Binder.java:453)
    285 ...
    286   "PackageManager" prio=5 tid=20 Blocked
    287   | group="main" sCount=1 dsCount=0 obj=0x1304f4a0 self=0xa7f43900
    288   | sysTid=1300 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x9fcf9930
    289   | state=S schedstat=( 26190141996 13612154802 44357 ) utm=2410 stm=209 core=2 HZ=100
    290   | stack=0x9fbf7000-0x9fbf9000 stackSize=1038KB
    291   | held mutexes=
    292   at com.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:718)
    293   - waiting to lock &lt;0x0231885a&gt; (a com.android.server.AppOpsService) held by thread 73
    294   at com.android.server.AppOpsService.noteOperation(AppOpsService.java:713)
    295   at com.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260)
    296   at com.android.server.AppOpsService$2.hasExternalStorage(AppOpsService.java:273)
    297   at com.android.server.MountService$MountServiceInternalImpl.hasExternalStorage(MountService.java:3431)
    298   at com.android.server.MountService.getVolumeList(MountService.java:2609)
    299   at android.os.storage.StorageManager.getVolumeList(StorageManager.java:880)
    300   at android.os.Environment$UserEnvironment.getExternalDirs(Environment.java:83)
    301   at android.os.Environment.isExternalStorageEmulated(Environment.java:708)
    302   at com.android.server.pm.PackageManagerService.isExternalMediaAvailable(PackageManagerService.java:9327)
    303   at com.android.server.pm.PackageManagerService.startCleaningPackages(PackageManagerService.java:9367)
    304   - locked &lt;0x025f9b02&gt; (a android.util.ArrayMap)
    305   at com.android.server.pm.PackageManagerService$PackageHandler.doHandleMessage(PackageManagerService.java:1320)
    306   at com.android.server.pm.PackageManagerService$PackageHandler.handleMessage(PackageManagerService.java:1122)
    307   at android.os.Handler.dispatchMessage(Handler.java:102)
    308   at android.os.Looper.loop(Looper.java:148)
    309   at android.os.HandlerThread.run(HandlerThread.java:61)
    310   at com.android.server.ServiceThread.run(ServiceThread.java:46)</pre></p>
    311   </section>
    312 
    313 
    314 <h2 id="activities">Activities</h2>
    315 <p>An <a href="http://developer.android.com/guide/components/activities.html">Activity</a>
    316 is an application component that provides a screen users interact with to do
    317 something such as dial a number, take a photo, send an email, etc. From a bug
    318 report perspective, an
    319 <a href="http://developer.android.com/reference/android/app/Activity.html">activity</a>
    320 is a single, focused thing a user can do, which makes locating the activity that
    321 was in focus during a crash very important. Activities (via ActivityManager)
    322 run processes, so locating all process stops and starts for a given activity can
    323 also aid troubleshooting.</p>
    324 
    325 <h3 id="history-focused-activities">Viewing focused activities</h3>
    326 <p>To view a history of focused activities, search for
    327 <code>am_focused_activity</code>.</p>
    328 
    329   <section class="expandable">
    330     <h4 class="showalways">Show example</h4>
    331     <p><pre>grep "am_focused_activity" bugreport-2015-10-01-18-13-48.txt
    332 10-01 18:10:41.409  4600 14112 I am_focused_activity: [0,com.google.android.GoogleCamera/com.android.camera.CameraActivity]
    333 10-01 18:11:17.313  4600  5687 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]
    334 10-01 18:11:52.747  4600 14113 I am_focused_activity: [0,com.google.android.GoogleCamera/com.android.camera.CameraActivity]
    335 10-01 18:14:07.762  4600  5687 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]</pre></p>
    336   </section>
    337 
    338 <h3 id="history-process-starts">Viewing process starts</h3>
    339 <p>To view a history of process starts, search for <code>Start proc</code>.</p>
    340 
    341   <section class="expandable">
    342     <h4 class="showalways">Show example</h4>
    343     <p><pre>grep "Start proc" bugreport-2015-10-01-18-13-48.txt
    344 10-01 18:09:15.309  4600  4612 I ActivityManager: Start proc 24533:com.metago.astro/u0a240 for broadcast com.metago.astro/com.inmobi.commons.analytics.androidsdk.IMAdTrackerReceiver
    345 10-01 18:09:15.687  4600 14112 I ActivityManager: Start proc 24548:com.google.android.apps.fitness/u0a173 for service com.google.android.apps.fitness/.api.services.ActivityUpsamplingService
    346 10-01 18:09:15.777  4600  6604 I ActivityManager: Start proc 24563:cloudtv.hdwidgets/u0a145 for broadcast cloudtv.hdwidgets/cloudtv.switches.SwitchSystemUpdateReceiver
    347 10-01 18:09:20.574  4600  6604 I ActivityManager: Start proc 24617:com.wageworks.ezreceipts/u0a111 for broadcast com.wageworks.ezreceipts/.ui.managers.IntentReceiver
    348 ...</pre></p>
    349   </section>
    350 
    351 <h3 id="device-thrashing">Is the device thrashing?</h3>
    352 <p>To determine if the device is
    353 <a href="https://en.wikipedia.org/wiki/Thrashing_(computer_science)">thrashing</a>,
    354 check for an abnormal increase in activity around <code>am_proc_died</code> and
    355 <code>am_proc_start</code> in a short amount of time.</p>
    356 
    357   <section class="expandable">
    358     <h4 class="showalways">Show example</h4>
    359     <p><pre>grep -e "am_proc_died" -e "am_proc_start" bugreport-2015-10-01-18-13-48.txt
    360 10-01 18:07:06.494  4600  9696 I am_proc_died: [0,20074,com.android.musicfx]
    361 10-01 18:07:06.555  4600  6606 I am_proc_died: [0,31166,com.concur.breeze]
    362 10-01 18:07:06.566  4600 14112 I am_proc_died: [0,18812,com.google.android.apps.fitness]
    363 10-01 18:07:07.018  4600  7513 I am_proc_start: [0,20361,10113,com.sony.playmemories.mobile,broadcast,com.sony.playmemories.mobile/.service.StartupReceiver]
    364 10-01 18:07:07.357  4600  4614 I am_proc_start: [0,20381,10056,com.google.android.talk,service,com.google.android.talk/com.google.android.libraries.hangouts.video.CallService]
    365 10-01 18:07:07.784  4600  4612 I am_proc_start: [0,20402,10190,com.andcreate.app.trafficmonitor:loopback_measure_serivce,service,com.andcreate.app.trafficmonitor/.loopback.LoopbackMeasureService]
    366 10-01 18:07:10.753  4600  5997 I am_proc_start: [0,20450,10097,com.amazon.mShop.android.shopping,broadcast,com.amazon.mShop.android.shopping/com.amazon.identity.auth.device.storage.LambortishClock$ChangeTimestampsBroadcastReceiver]
    367 10-01 18:07:15.267  4600  6605 I am_proc_start: [0,20539,10173,com.google.android.apps.fitness,service,com.google.android.apps.fitness/.api.services.ActivityUpsamplingService]
    368 10-01 18:07:15.985  4600  4612 I am_proc_start: [0,20568,10022,com.android.musicfx,broadcast,com.android.musicfx/.ControlPanelReceiver]
    369 10-01 18:07:16.315  4600  7512 I am_proc_died: [0,20096,com.google.android.GoogleCamera]</pre></p>
    370   </section>
    371 
    372 <h2 id="memory">Memory</h2>
    373 <p>Because Android devices often have constrained physical memory, managing
    374 random-access memory (RAM) is critical. Bug reports contain several indicators
    375 of low memory as well as a dumpstate that provides a memory snapshot.</p>
    376 
    377 <h3 id="low-memory">Identifying low memory</h3>
    378 <p>Low memory can cause the system to thrash as it kills some processes to free
    379 memory but continues to start other processes. To view corroborating evidence of
    380 low memory, check for concentrations of <code>am_proc_died</code> and
    381 <code>am_proc_start</code> entries in the binary event log.</p>
    382 
    383 <p>Low memory can also slow task switching and thwart return attempts (because
    384 the task the user was trying to return to was killed). If the launcher was
    385 killed, it restarts when the user touches the home button and logs show the
    386 launcher reload its content.</p>
    387 
    388 <h4 id="historical-low-memory">Viewing historical indicators</h4>
    389 <p>The <code>am_low_memory</code> entry in the binary event log indicates the
    390 last cached process has died. After this, the system starts killing services.
    391 
    392   <section class="expandable">
    393     <h4 class="showalways">Show example</h4>
    394     <p><pre>grep "am_low_memory" bugreport-2015-10-01-18-13-48.txt
    395 10-01 18:11:02.219  4600  7513 I am_low_memory: 41
    396 10-01 18:12:18.526  4600 14112 I am_low_memory: 39
    397 10-01 18:12:18.874  4600  7514 I am_low_memory: 38
    398 10-01 18:12:22.570  4600 14112 I am_low_memory: 40
    399 10-01 18:12:34.811  4600 20319 I am_low_memory: 43
    400 10-01 18:12:37.945  4600  6521 I am_low_memory: 43
    401 10-01 18:12:47.804  4600 14110 I am_low_memory: 43</pre></p>
    402   </section>
    403 
    404 <h4 id="thrashing-indicators">Viewing thrashing indicators</h4>
    405 <p>Other indicators of system thrashing (paging, direct reclaim, etc.) include
    406 <code>kswapd</code>, <code>kworker</code>, and <code>mmcqd</code> consuming
    407 cycles. (Keep in mind the bugreport being gathered can influence thrashing
    408 indicators.)</p>
    409 
    410   <section class="expandable">
    411     <h4 class="showalways">Show example</h4>
    412     <p><pre>------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------
    413 
    414 User 15%, System 54%, IOW 28%, IRQ 0%
    415 User 82 + Nice 2 + Sys 287 + Idle 1 + IOW 152 + IRQ 0 + SIRQ 5 = 529
    416 
    417   PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc
    418 15229 15229  0  19% R      0K      0K  fg root     kworker/0:2
    419 29512 29517  1   7% D 1173524K 101188K  bg u0_a27   Signal Catcher  com.google.android.talk
    420 24565 24570  3   6% D 2090920K 145168K  fg u0_a22   Signal Catcher  com.google.android.googlequicksearchbox:search
    421 19525 19525  2   6% R   3476K   1644K  fg shell    top             top
    422 24957 24962  2   5% R 1706928K 125716K  bg u0_a47   Signal Catcher  com.google.android.GoogleCamera
    423 19519 19519  3   4% S      0K      0K  fg root     kworker/3:1
    424   120   120  0   3% S      0K      0K  fg root     mmcqd/1
    425 18233 18233  1   3% S      0K      0K  fg root     kworker/1:1
    426 25589 25594  1   2% D 1270476K  75776K  fg u0_a8    Signal Catcher  com.google.android.gms
    427 19399 19399  2   1% S      0K      0K  fg root     kworker/2:2
    428  1963  1978  1   0% S 1819100K 125136K  fg system   android.fg      system_server
    429  1963  1981  3   0% S 1819100K 125136K  fg system   android.display system_server</pre></p>
    430   </section>
    431 <p></p>
    432 
    433 <p>ANR logs can provide a similar memory snapshot.</p>
    434 
    435   <section class="expandable">
    436     <h4 class="showalways">Show example</h4>
    437     <p><pre>10-03 17:19:59.959  1963  1976 E ActivityManager: ANR in com.google.android.apps.magazines
    438 10-03 17:19:59.959  1963  1976 E ActivityManager: PID: 18819
    439 10-03 17:19:59.959  1963  1976 E ActivityManager: Reason: Broadcast of Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 cmp=com.google.android.apps.magazines/com.google.apps.dots.android.newsstand.appwidget.NewsWidgetProvider (has extras) }
    440 10-03 17:19:59.959  1963  1976 E ActivityManager: Load: 19.19 / 14.76 / 12.03
    441 10-03 17:19:59.959  1963  1976 E ActivityManager: CPU usage from 0ms to 11463ms later:
    442 10-03 17:19:59.959  1963  1976 E ActivityManager:   54% 15229/kworker/0:2: 0% user + 54% kernel
    443 10-03 17:19:59.959  1963  1976 E ActivityManager:   38% 1963/system_server: 14% user + 23% kernel / faults: 17152 minor 1073 major
    444 10-03 17:19:59.959  1963  1976 E ActivityManager:   11% 120/mmcqd/1: 0% user + 11% kernel
    445 10-03 17:19:59.959  1963  1976 E ActivityManager:   10% 2737/com.android.systemui: 4.7% user + 5.6% kernel / faults: 7211 minor 149 major
    446 10-03 17:19:59.959  1963  1976 E ActivityManager:   0.2% 1451/debuggerd: 0% user + 0.2% kernel / faults: 15211 minor 147 major
    447 10-03 17:19:59.959  1963  1976 E ActivityManager:   8.7% 6162/com.twofortyfouram.locale: 4% user + 4.7% kernel / faults: 4924 minor 260 major
    448 10-03 17:19:59.959  1963  1976 E ActivityManager:   6.1% 24565/com.google.android.googlequicksearchbox:search: 2.4% user + 3.7% kernel / faults: 2902 minor 129 major
    449 10-03 17:19:59.959  1963  1976 E ActivityManager:   6% 55/kswapd0: 0% user + 6% kernel
    450 10-03 17:19:59.959  1963  1976 E ActivityManager:   4.9% 18819/com.google.android.apps.magazines: 1.5% user + 3.3% kernel / faults: 10129 minor 986 major
    451 10-03 17:19:59.959  1963  1976 E ActivityManager:   2.8% 18233/kworker/1:1: 0% user + 2.8% kernel
    452 10-03 17:19:59.959  1963  1976 E ActivityManager:   4.2% 3145/com.android.phone: 2% user + 2.2% kernel / faults: 3005 minor 43 major
    453 10-03 17:19:59.959  1963  1976 E ActivityManager:   4.2% 8084/com.android.chrome: 2% user + 2.1% kernel / faults: 4798 minor 380 major
    454 10-03 17:19:59.959  1963  1976 E ActivityManager:   3.4% 182/surfaceflinger: 1.1% user + 2.3% kernel / faults: 842 minor 13 major
    455 10-03 17:19:59.959  1963  1976 E ActivityManager:   3% 18236/kworker/1:2: 0% user + 3% kernel
    456 10-03 17:19:59.959  1963  1976 E ActivityManager:   2.9% 19231/com.android.systemui:screenshot: 0.8% user + 2.1% kernel / faults: 6119 minor 348 major
    457 10-03 17:19:59.959  1963  1976 E ActivityManager:   2.3% 15350/kworker/0:4: 0% user + 2.3% kernel
    458 10-03 17:19:59.959  1963  1976 E ActivityManager:   2.2% 1454/mediaserver: 0% user + 2.2% kernel / faults: 479 minor 6 major
    459 10-03 17:19:59.959  1963  1976 E ActivityManager:   2% 16496/com.android.chrome:sandboxed_process10: 0.1% user + 1.8% kernel / faults: 3610 minor 234 major
    460 10-03 17:19:59.959  1963  1976 E ActivityManager:   1% 3119/com.android.nfc: 0.4% user + 0.5% kernel / faults: 1789 minor 17 major
    461 10-03 17:19:59.959  1963  1976 E ActivityManager:   1.7% 19337/com.jarettmillard.localeconnectiontype:background: 0.1% user + 1.5% kernel / faults: 7854 minor 439 major
    462 10-03 17:19:59.959  1963  1976 E ActivityManager:   0.7% 3066/com.google.android.inputmethod.latin: 0.3% user + 0.3% kernel / faults: 1336 minor 7 major
    463 10-03 17:19:59.959  1963  1976 E ActivityManager:   1% 25589/com.google.android.gms: 0.3% user + 0.6% kernel / faults: 2867 minor 237 major
    464 10-03 17:19:59.959  1963  1976 E ActivityManager:   0.9% 1460/sensors.qcom: 0.5% user + 0.4% kernel / faults: 262 minor 5 major
    465 10-03 17:19:59.959  1963  1976 E ActivityManager:   0.8% 3650/mpdecision: 0% user + 0.8% kernel / faults: 160 minor 1 major
    466 10-03 17:19:59.959  1963  1976 E ActivityManager:   0.1% 3132/com.redbend.vdmc: 0% user + 0% kernel / faults: 1746 minor 5 major</pre></p>
    467   </section>
    468 
    469 <h3 id="memory-snapshot">Getting a memory snapshot</h3>
    470 <p>The memory snapshot is a dumpstate that lists running Java and native
    471 processes (for details, refer to
    472 <a href="https://developer.android.com/tools/debugging/debugging-memory.html#ViewingAllocations">Viewing
    473 Overall Memory Allocations</a>). Keep in mind the snapshot gives only the state
    474 at a specific moment in time; the system might have been in better (or worse)
    475 shape before the snapshot.</p>
    476 <ul>
    477 <li>To understand how long a process runs, see
    478 <a href="#process-runtime">Process runtime</a>.</li>
    479 <li>To understand why something is currently running, see
    480 <a href="#why-is-process-running">Why is a process running?</a></li>
    481 </ul>
    482 
    483   <section class="expandable">
    484     <h4 class="showalways">Show example</h4>
    485     <p><pre>Total PSS by OOM adjustment:
    486     86752 kB: Native
    487                22645 kB: surfaceflinger (pid 197)
    488                18597 kB: mediaserver (pid 204)
    489                ...
    490    136959 kB: System
    491               136959 kB: system (pid 785)
    492    220218 kB: Persistent
    493               138859 kB: com.android.systemui (pid 947 / activities)
    494                39178 kB: com.android.nfc (pid 1636)
    495                28313 kB: com.android.phone (pid 1659)
    496                13868 kB: com.redbend.vdmc (pid 1646)
    497      9534 kB: Persistent Service
    498                 9534 kB: com.android.bluetooth (pid 23807)
    499    178604 kB: Foreground
    500               168620 kB: com.google.android.googlequicksearchbox (pid 1675 / activities)
    501                 9984 kB: com.google.android.apps.maps (pid 13952)
    502    188286 kB: Visible
    503                85326 kB: com.google.android.wearable.app (pid 1535)
    504                38978 kB: com.google.process.gapps (pid 1510)
    505                31936 kB: com.google.android.gms.persistent (pid 2072)
    506                27950 kB: com.google.android.gms.wearable (pid 1601)
    507                 4096 kB: com.google.android.googlequicksearchbox:interactor (pid 1550)
    508     52948 kB: Perceptible
    509                52948 kB: com.google.android.inputmethod.latin (pid 1566)
    510    150851 kB: A Services
    511                81121 kB: com.google.android.gms (pid 1814)
    512                37586 kB: com.google.android.talk (pid 9584)
    513                10949 kB: com.google.android.music:main (pid 4019)
    514                10727 kB: com.motorola.targetnotif (pid 31071)
    515                10468 kB: com.google.android.GoogleCamera (pid 9984)
    516     33298 kB: Previous
    517                33298 kB: com.android.settings (pid 9673 / activities)
    518    165188 kB: B Services
    519                49490 kB: com.facebook.katana (pid 15035)
    520                22483 kB: com.whatsapp (pid 28694)
    521                21308 kB: com.iPass.OpenMobile (pid 5325)
    522                19788 kB: com.google.android.apps.googlevoice (pid 23934)
    523                17399 kB: com.google.android.googlequicksearchbox:search (pid 30359)
    524                 9073 kB: com.google.android.apps.youtube.unplugged (pid 21194)
    525                 7660 kB: com.iPass.OpenMobile:remote (pid 23754)
    526                 7291 kB: com.pujie.wristwear.pujieblack (pid 24240)
    527                 7157 kB: com.instagram.android:mqtt (pid 9530)
    528                 3539 kB: com.qualcomm.qcrilmsgtunnel (pid 16186)
    529    204324 kB: Cached
    530                43424 kB: com.amazon.mShop.android (pid 13558)
    531                22563 kB: com.google.android.apps.magazines (pid 13844)
    532                ...
    533                 4298 kB: com.google.android.apps.enterprise.dmagent (pid 13826)</pre></p>
    534   </section>
    535 
    536 <h2 id="broadcasts">Broadcasts</h2>
    537 <p>Applications generate broadcasts to send events within the current
    538 application or to another application. Broadcast receivers subscribe to specific
    539 messages (via filters), enabling them to both listen and respond to a broadcast.
    540 Bug reports contain information about sent broadcasts and unsent broadcasts, as
    541 well as a dumpsys of all receivers listening to a specific broadcast.</p>
    542 
    543 <h3 id="historical-broadcasts">Viewing historical broadcasts</h3>
    544 <p>Historical broadcasts are those that have already been sent, listed in
    545 reverse chronological order.</p>
    546 
    547 <p>The <strong>summary</strong> section is an overview of the last 300
    548 foreground broadcasts and the last 300 background broadcasts.</p>
    549 
    550   <section class="expandable">
    551     <h4 class="showalways">Show example</h4>
    552     <p><pre> Historical broadcasts summary [foreground]:
    553  #0: act=android.intent.action.SCREEN_ON flg=0x50000010
    554     +1ms dispatch +90ms finish
    555     enq=2015-10-29 17:10:51 disp=2015-10-29 17:10:51 fin=2015-10-29 17:10:51
    556   #1: act=android.intent.action.SCREEN_OFF flg=0x50000010
    557     0 dispatch +60ms finish
    558     enq=2015-10-29 17:10:05 disp=2015-10-29 17:10:05 fin=2015-10-29 17:10:05
    559  ...
    560  Historical broadcasts summary [background]:
    561  ...</pre></p>
    562   </section>
    563 <p></p>
    564 
    565 <p>The <strong>detail</strong> section contains complete information for the
    566 last 50 foreground broadcasts and the last 50 background broadcasts, as well as
    567 the receivers for each broadcast. Receivers that have a:</p>
    568 <ul>
    569 <li><code>BroadcastRecord</code> entry are registered at runtime and are sent
    570 only to already running processes.</li>
    571 <li><code>ResolveInfo</code> entry are registered through manifest entries. The
    572 ActivityManager starts the process for each <code>ResolveInfo</code> if it is
    573 not already running.</li>
    574 </ul>
    575 
    576   <section class="expandable">
    577     <h4 class="showalways">Show example</h4>
    578     <p><pre>Historical broadcasts [foreground]:
    579  ...
    580  Historical broadcasts [background]:
    581  Historical Broadcast background #0:
    582  ...
    583  Historical Broadcast background #5:
    584     BroadcastRecord{18dbb16 u0 android.intent.action.USER_PRESENT} to user 0
    585     Intent { act=android.intent.action.USER_PRESENT flg=0x24000010 }
    586     caller=com.android.systemui 2925:com.android.systemui/u0a27 pid=2925 uid=10027
    587     enqueueClockTime=2015-10-29 17:10:55 dispatchClockTime=2015-10-29 17:10:55
    588     dispatchTime=-2s321ms (0 since enq) finishTime=-2s320ms (+1ms since disp)
    589     Receiver #0: BroadcastFilter{8181cc1 u-1 ReceiverList{5d929a8 902 system/1000/u-1 local:eca4dcb}}
    590     Receiver #1: BroadcastFilter{6371c97 u-1 ReceiverList{2938b16 902 system/1000/u-1 local:840b831}}
    591     ...
    592     Receiver #19: BroadcastFilter{93f16b u0 ReceiverList{5c61eba 17016 com.google.android.gm/10079/u0 remote:24083e5}}
    593  ...
    594  Historical Broadcast background #37:
    595     BroadcastRecord{7f6dd6 u0 android.hardware.action.NEW_PICTURE} to user 0
    596     Intent { act=android.hardware.action.NEW_PICTURE dat=content://media/external/images/media/6345 flg=0x10 }
    597     caller=com.google.android.GoogleCamera 32734:com.google.android.GoogleCamera/u0a53 pid=32734 uid=10053
    598     enqueueClockTime=2015-10-29 17:09:48 dispatchClockTime=2015-10-29 17:09:49
    599     dispatchTime=-45s720ms (+399ms since enq) finishTime=-45s701ms (+19ms since disp)
    600     resultTo=null resultCode=0 resultData=null
    601     nextReceiver=4 receiver=null
    602     Receiver #0: ResolveInfo{33d2857 com.google.android.gms/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
    603       priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
    604       ActivityInfo:
    605         name=com.google.android.libraries.social.mediamonitor.MediaMonitor
    606         packageName=com.google.android.gms
    607         enabled=true exported=true processName=com.google.android.gms
    608         ...
    609     Receiver #1: ResolveInfo{d9edf44 com.google.android.apps.maps/com.google.android.apps.gmm.ugc.clientnotification.StartPhotoTakenNotifierServiceReceiver m=0x608000}
    610       priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
    611       ActivityInfo:
    612         name=com.google.android.apps.gmm.ugc.clientnotification.StartPhotoTakenNotifierServiceReceiver
    613         packageName=com.google.android.apps.maps
    614         enabled=true exported=true processName=com.google.android.apps.maps
    615         ...
    616     Receiver #2: ResolveInfo{743f82d com.google.android.apps.photos/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
    617       priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
    618       ActivityInfo:
    619         name=com.google.android.libraries.social.mediamonitor.MediaMonitor
    620         packageName=com.google.android.apps.photos
    621         enabled=true exported=true processName=com.google.android.apps.photos
    622         ...
    623     Receiver #3: ResolveInfo{d5c9162 com.google.android.apps.plus/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
    624       priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
    625       ActivityInfo:
    626         name=com.google.android.libraries.social.mediamonitor.MediaMonitor
    627         packageName=com.google.android.apps.plus
    628         enabled=true exported=true processName=com.google.android.apps.plus
    629         ...</pre></p>
    630   </section>
    631 
    632 <h3 id="active-broadcasts">Viewing active broadcasts</h3>
    633 <p>Active broadcasts are those that have yet to be sent. A large number in the
    634 queue means the system can't dispatch the broadcasts fast enough to keep up.</p>
    635 
    636   <section class="expandable">
    637     <h4 class="showalways">Show example</h4>
    638     <p><pre> Active ordered broadcasts [background]:
    639  Active Ordered Broadcast background #133: <i>// size of queue</i>
    640  ...</pre></p>
    641   </section>
    642 
    643 <h3 id="broadcast-listeners">Viewing broadcast listeners</h3>
    644 <p>To view a list of receivers listening for a broadcast, check the Receiver
    645 Resolver Table in the <code>dumpsys activity broadcasts</code>. The following
    646 example displays all receivers listening for <code>USER_PRESENT</code>.</p>
    647 
    648   <section class="expandable">
    649     <h4 class="showalways">Show example</h4>
    650     <p><pre>-------------------------------------------------------------------------------
    651 ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)
    652 ..
    653   Receiver Resolver Table:
    654     Full MIME Types:
    655     ..
    656     Wild MIME Types:
    657     ..
    658     Schemes:
    659     ..
    660     Non-Data Actions:
    661     ..
    662         android.intent.action.USER_PRESENT:
    663           BroadcastFilter{8181cc1 u-1 ReceiverList{5d929a8 902 system/1000/u-1 local:eca4dcb}}
    664           BroadcastFilter{6371c97 u-1 ReceiverList{2938b16 902 system/1000/u-1 local:840b831}}
    665           BroadcastFilter{320c00 u0 ReceiverList{d3a6283 902 system/1000/u0 local:799c532}}
    666           BroadcastFilter{e486048 u0 ReceiverList{36fbaeb 902 system/1000/u0 local:5f51e3a}}
    667           BroadcastFilter{22b02 u-1 ReceiverList{b3f744d 902 system/1000/u-1 local:de837e4}}
    668           BroadcastFilter{3e989ab u0 ReceiverList{f8deffa 2981 com.google.process.gapps/10012/u0 remote:26bd225}}
    669           BroadcastFilter{fb56150 u0 ReceiverList{22b7b13 2925 com.android.systemui/10027/u0 remote:c54a602}}
    670           BroadcastFilter{63bbb6 u-1 ReceiverList{ba6c751 3484 com.android.nfc/1027/u-1 remote:5c4a478}}
    671           BroadcastFilter{95ad20d u0 ReceiverList{d8374a4 3586 com.google.android.googlequicksearchbox/10029/u0 remote:feb3737}}
    672           BroadcastFilter{fdef551 u0 ReceiverList{28ca78 3745 com.google.android.gms.persistent/10012/u0 remote:f23afdb}}
    673           BroadcastFilter{9830707 u0 ReceiverList{aabd946 3745 com.google.android.gms.persistent/10012/u0 remote:a4da121}}
    674           BroadcastFilter{83c43d2 u0 ReceiverList{d422e5d 3745 com.google.android.gms.persistent/10012/u0 remote:f585034}}
    675           BroadcastFilter{8890378 u0 ReceiverList{26d2cdb 3745 com.google.android.gms.persistent/10012/u0 remote:dfa61ea}}
    676           BroadcastFilter{7bbb7 u0 ReceiverList{214b2b6 3745 com.google.android.gms.persistent/10012/u0 remote:8353a51}}
    677           BroadcastFilter{38d3566 u0 ReceiverList{de859c1 3745 com.google.android.gms.persistent/10012/u0 remote:e003aa8}}
    678           BroadcastFilter{3435d9f u0 ReceiverList{6e38b3e 3745 com.google.android.gms.persistent/10012/u0 remote:8dd7ff9}}
    679           BroadcastFilter{d0a34bb u0 ReceiverList{5091d4a 3745 com.google.android.gms.persistent/10012/u0 remote:d6d22b5}}
    680           BroadcastFilter{d43c416 u0 ReceiverList{51a3531 3745 com.google.android.gms.persistent/10012/u0 remote:d0b9dd8}}
    681           BroadcastFilter{aabf36d u0 ReceiverList{a88bf84 3745 com.google.android.gms.persistent/10012/u0 remote:a9d6197}}
    682           BroadcastFilter{93f16b u0 ReceiverList{5c61eba 17016 com.google.android.gm/10079/u0 remote:24083e5}}
    683           BroadcastFilter{68f794e u0 ReceiverList{4cb1c49 947 com.google.android.googlequicksearchbox:search/10029/u0 remote:251d250}}
    684       ..
    685     MIME Typed Actions:</pre></p>
    686   </section>
    687 
    688 <h2 id="monitor contention">Monitor contention</h2>
    689 <p>Monitor contention logging can sometimes indicate actual monitor contention,
    690 but most often indicates the system is so loaded that everything has slowed down.
    691 You might see long monitor events logged by ART in system or event log.</p>
    692 
    693 <p>In the system log:</p>
    694 <p><pre>10-01 18:12:44.343 29761 29914 W art     : Long monitor contention event with owner method=void android.database.sqlite.SQLiteClosable.acquireReference() from SQLiteClosable.java:52 waiters=0 for 3.914s</pre></p>
    695 
    696 <p>In the event log:</p>
    697 <p><pre>10-01 18:12:44.364 29761 29914 I dvm_lock_sample: [com.google.android.youtube,0,pool-3-thread-9,3914,ScheduledTaskMaster.java,138,SQLiteClosable.java,52,100]</pre></p>
    698 
    699 <h2 id="background-compilation">Background compilation</h2>
    700 <p>Compilation can be expensive and load the device.</p>
    701 
    702   <section class="expandable">
    703     <h4 class="showalways">Show example</h4>
    704     <p><pre>09-14 06:27:05.670  2508  2587 E ActivityManager: CPU usage from 0ms to 5857ms later:
    705 09-14 06:27:05.670  2508  2587 E ActivityManager:   84% 5708/dex2oat: 81% user + 2.3% kernel / faults: 3731 minor 1 major
    706 09-14 06:27:05.670  2508  2587 E ActivityManager:   73% 2508/system_server: 21% user + 51% kernel / faults: 10019 minor 28 major
    707 09-14 06:27:05.670  2508  2587 E ActivityManager:   1% 3935/com.android.phone: 0.3% user + 0.6% kernel / faults: 2684 minor 2 major</pre></p>
    708   </section>
    709 <p></p>
    710 
    711 <p>Compilation might occur in the background when Google Play store updates are
    712 downloading. In this case, messages from the Google Play store app
    713 (<code>finsky</code>) and <code>installd</code> appear prior to
    714 <code>dex2oat</code> messages.</p>
    715 
    716   <section class="expandable">
    717     <h4 class="showalways">Show example</h4>
    718     <p><pre>10-07 08:42:33.725 11051 11051 D Finsky  : [1] InstallerTask.advanceState: Prepare to patch com.garmin.android.apps.virb (com.garmin.android.apps.virb) from content://downloads/my_downloads/3602 format 2
    719 10-07 08:42:33.752   495   495 I installd: free_cache(48637657) avail 15111192576
    720 
    721 10-07 08:42:39.998  2497  2567 I PackageManager.DexOptimizer: Running dexopt (dex2oat) on: /data/app/vmdl436577137.tmp/base.apk pkg=com.garmin.android.apps.virb isa=arm vmSafeMode=false debuggable=false oatDir = /data/app/vmdl436577137.tmp/oat bootComplete=true
    722 </pre></p>
    723   </section>
    724 <p></p>
    725 
    726 <p>Compilation might also occur in the background when an application is loading
    727 a dex file that has not yet been compiled. In this case, you won't see
    728 <code>finsky</code> or <code>installd</code> logging.</p>
    729 
    730   <section class="expandable">
    731     <h4 class="showalways">Show example</h4>
    732     <p><pre>09-14 07:29:20.433 15736 15736 I dex2oat : /system/bin/dex2oat -j4 --dex-file=/data/user/0/com.facebook.katana/app_secondary_program_dex/program-72cef82b591768306676e10161c886b58b34315a308602be.dex.jar --oat-file=/data/user/0/com.facebook.katana/app_secondary_program_dex_opt/program-72cef82b591768306676e10161c886b58b34315a308602be.dex.dex
    733 ...
    734 09-14 07:29:25.102 15736 15736 I dex2oat : dex2oat took 4.669s (threads: 4) arena alloc=7MB java alloc=3MB native alloc=29MB free=4MB</pre></p>
    735   </section>
    736 
    737 <h2 id="narrative">Narrative</h2>
    738 <p>Establishing the narrative of a problem (how it started, what happened, how
    739 the system reacted) requires a solid timeline of events. You can use the
    740 information in the bug report to sync timelines across multiple logs and
    741 determine the exact timestamp of the bug report.</p>
    742 
    743 <h3 id="timelines">Syncing timelines</h3>
    744 <p>A bugreport reflects multiple parallel timelines: system log, event log,
    745 kernel log, and multiple specialized timelines for broadcasts, battery stats,
    746 etc. Unfortunately, timelines are often reported using different time bases.</p>
    747 
    748 <p>The system and event log timestamps are in the same timezone as the user (as
    749 are most other timestamps). For example, when user taps the home button, the
    750 system log reports:</p>
    751 <p><pre>10-03 17:19:52.939  1963  2071 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL (has extras)} from uid 1000 on display 0</pre></p>
    752 
    753 <p>For the same action, the event log reports:</p>
    754 <p><pre>10-03 17:19:54.279  1963  2071 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]</pre></p>
    755 
    756 <p>Kernel (<code>dmesg</code>) logs use a different time base, tagging log items
    757 with seconds since bootloader completes. To register this timescale to other
    758 timescales, search for <em>suspend exit</em> and <em>suspend entry</em> messages:</p>
    759 <p><pre>&lt;6&gt;[201640.779997] PM: suspend exit 2015-10-03 19:11:06.646094058 UTC
    760 
    761 &lt;6&gt;[201644.854315] PM: suspend entry 2015-10-03 19:11:10.720416452 UTC</pre></p>
    762 
    763 <p>Because kernel logs might not include time while in suspend, you should
    764 piecewise register the log between the suspend entry and exit messages.
    765 Additionally, kernel logs use UTC timezone and must be adjusted to the user
    766 timezone.</p>
    767 
    768 <h3 id="time-of-bugreport">Identifying bugreport time</h3>
    769 <p>To determine when a bugreport was taken, first check the system log (Logcat)
    770 for the <code>dumpstate: begin</code>:</p>
    771 <p><pre>10-03 17:19:54.322 19398 19398 I dumpstate: begin</pre></p>
    772 
    773 <p>Next, check the kernel log (<code>dmesg</code>) timestamps for the <code>Starting service
    774 'bugreport'</code> message:</p>
    775 <p><pre>&lt;5&gt;[207064.285315] init: Starting service 'bugreport'...</pre></p>
    776 
    777 <p>Work backwards to correlate the two events, keeping in mind the caveats
    778 mentioned in <a href="#timelines">Syncing timelines</a>. While there's a lot
    779 happening after the bugreport is initiated, most activity isn't very useful as
    780 the act of taking the bugreport loads the system substantially.</p>
    781 
    782 <h2 id="power">Power</h2>
    783 
    784 <p>The event log contains screen power status, where 0 is screen off, 1 is
    785 screen on, and 2 is for keyguard done.</p>
    786 
    787   <section class="expandable">
    788     <h4 class="showalways">Show example</h4>
    789     <p><pre>grep screen_toggled bugreport-2015-10-18-16-52-22.txt
    790 10-18 15:05:04.383   992   992 I screen_toggled: 1
    791 10-18 15:05:07.010   992   992 I screen_toggled: 0
    792 10-18 15:23:15.063   992   992 I screen_toggled: 1
    793 10-18 15:23:25.684   992   992 I screen_toggled: 0
    794 10-18 15:36:31.623   992   992 I screen_toggled: 1
    795 10-18 15:36:37.660  3283  3283 I screen_toggled: 2</pre></p>
    796   </section>
    797 
    798 <p></p>
    799 <p>Bug reports also contain statistics about wake locks, a mechanism used by
    800 application developers to indicate their application needs to have the device
    801 stay on. (For details on wake locks, refer to
    802 <a href="https://developer.android.com/reference/android/os/PowerManager.WakeLock.html">PowerManager.WakeLock</a>
    803 and <a href="https://developer.android.com/training/scheduling/wakelock.html#cpu">Keep
    804 the CPU on</a>.)
    805 
    806 <p>The aggregated wake lock duration statistics track <strong>only</strong> the
    807 time a wake lock is actually responsible for keeping the device awake and
    808 <strong>do not</strong> include time with the screen on. In addition, if
    809 multiple wake locks are held simultaneously, the wake lock duration time is
    810 distributed across those wake locks.</p>
    811 
    812 <p>For more help visualizing power status, use
    813 <a href="https://github.com/google/battery-historian">Battery Historian</a>, a
    814 Google open source tool to analyze battery consumers using Android bugreport
    815 files.</p>
    816 
    817 <h2 id="packages">Packages</h2>
    818 <p>The DUMP OF SERVICE package contains application versions (and other useful
    819 info).</p>
    820 
    821   <section class="expandable">
    822     <h4 class="showalways">Show example</h4>
    823     <p><pre>...
    824 Packages:
    825 ...
    826  Package [com.google.android.gms] (3cf534b):
    827    userId=10013
    828    sharedUser=SharedUserSetting{98f3d28 com.google.uid.shared/10013}
    829    pkg=Package{b8f6a41 com.google.android.gms}
    830    codePath=/system/priv-app/PrebuiltGmsCore
    831    resourcePath=/system/priv-app/PrebuiltGmsCore
    832    legacyNativeLibraryDir=/system/priv-app/PrebuiltGmsCore/lib
    833    primaryCpuAbi=arm64-v8a
    834    secondaryCpuAbi=armeabi-v7a
    835    versionCode=8186448 targetSdk=23
    836    versionName=8.1.86 (2287566-448)
    837    splits=[base]
    838    applicationInfo=ApplicationInfo{5158507 com.google.android.gms}
    839    flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
    840    privateFlags=[ PRIVILEGED ]
    841    dataDir=/data/user/0/com.google.android.gms
    842    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
    843    libraries:
    844      com.google.android.gms
    845    usesOptionalLibraries:
    846      com.android.location.provider
    847      com.google.android.ble
    848      com.android.media.remotedisplay
    849    usesLibraryFiles:
    850      /system/framework/com.android.media.remotedisplay.jar
    851      /system/framework/com.android.location.provider.jar
    852    timeStamp=2015-10-14 15:17:56
    853    firstInstallTime=2015-09-22 14:08:35
    854    lastUpdateTime=2015-10-14 15:17:56
    855    signatures=PackageSignatures{db63be6 [1af63d8]}
    856    installPermissionsFixed=true installStatus=1
    857    pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
    858    declared permissions:
    859      com.google.android.gms.permission.INTERNAL_BROADCAST: prot=signature, INSTALLED
    860      ...
    861      com.google.android.gms.permission.CAR_VENDOR_EXTENSION: prot=dangerous, INSTALLED
    862    User 0:  installed=true hidden=false stopped=false notLaunched=false enabled=0
    863      disabledComponents:
    864        com.google.android.gms.icing.service.PowerConnectedReceiver
    865        ...
    866        com.google.android.gms.icing.proxy.AppsMonitor
    867      enabledComponents:
    868        com.google.android.gms.mdm.receivers.GmsRegisteredReceiver
    869        ...
    870        com.google.android.gms.subscribedfeeds.SyncService</pre></p>
    871   </section>
    872 
    873 <h2 id="processes">Processes</h2>
    874 <p>Bug reports contain a huge amount of data for processes, including start and
    875 stop time, runtime length, associated services, <code>oom_adj</code> score, etc.
    876 For details on how Android manages processes, refer to
    877 <a href="http://developer.android.com/guide/components/processes-and-threads.html">Processes
    878 and Threads</a>.</p>
    879 
    880 <h3 id="process-runtime">Determining process runtime</h3>
    881 <p>The <code>procstats</code> section contains complete statistics on how long
    882 processes and associated services have been running. For a quick, human-readable
    883 summary, search for <code>AGGREGATED OVER</code> to view data from either the
    884 last three or 24 hours, then search for <code>Summary:</code> to view the list
    885 of processes, how long those processes have run at various priorities, and their
    886 RAM usage formatted as min-average-max PSS/min-average-max USS.</p>
    887 
    888   <section class="expandable">
    889     <h4 class="showalways">Show example</h4>
    890     <p><pre>-------------------------------------------------------------------------------
    891 DUMP OF SERVICE processinfo:
    892 -------------------------------------------------------------------------------
    893 DUMP OF SERVICE procstats:
    894 COMMITTED STATS FROM 2015-10-19-23-54-56 (checked in):
    895 ...
    896 COMMITTED STATS FROM 2015-10-20-03-00-00 (checked in):
    897 ...
    898 CURRENT STATS:
    899 ...
    900 AGGREGATED OVER LAST 24 HOURS:
    901 System memory usage:
    902 ...
    903 Per-Package Stats:
    904 ...
    905 Summary:
    906 ...
    907   * com.google.android.gms.persistent / u0a13 / v8186448:
    908            TOTAL: 100% (21MB-27MB-40MB/20MB-24MB-38MB over 597)
    909              Top: 51% (22MB-26MB-38MB/21MB-24MB-36MB over 383)
    910           Imp Fg: 49% (21MB-27MB-40MB/20MB-25MB-38MB over 214)
    911 
    912           Start time: 2015-10-19 09:14:37
    913   Total elapsed time: +1d0h22m7s390ms (partial) libart.so
    914 
    915 AGGREGATED OVER LAST 3 HOURS:
    916 System memory usage:
    917 ...
    918 Per-Package Stats:
    919 ...
    920 Summary:
    921   * com.google.android.gms.persistent / u0a13 / v8186448:
    922            TOTAL: 100% (23MB-27MB-32MB/21MB-25MB-29MB over 111)
    923              Top: 61% (23MB-26MB-31MB/21MB-24MB-28MB over 67)
    924           Imp Fg: 39% (23MB-28MB-32MB/21MB-26MB-29MB over 44)
    925 ...
    926           Start time: 2015-10-20 06:49:24
    927   Total elapsed time: +2h46m59s736ms (partial) libart.so</pre></p>
    928   </section>
    929 
    930 <h3 id="why-is-process-running">Why is a process running?</h3>
    931 <p>The <code>dumpsys activity processes</code> section lists all currently
    932 running processes ordered by <code>oom_adj</code> score (Android indicates
    933 process importance by assigning the process an <code>oom_adj</code> value, which
    934 can be dynamically updated by ActivityManager). The output is similar to that of
    935 a <a href="#memory-snapshot">memory snapshot</a> but includes additional
    936 information about what is causing the process to run. In the example below,
    937 the bolded entries indicate the <code>gms.persistent</code> process is running
    938 at <code>vis</code> (visible) priority because the system process is bound to
    939 its <code>NetworkLocationService</code>.</p>
    940 
    941   <section class="expandable">
    942     <h4 class="showalways">Show example</h4>
    943     <p><pre>-------------------------------------------------------------------------------
    944 ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
    945 ...
    946 Process LRU list (sorted by oom_adj, 34 total, non-act at 14, non-svc at 14):
    947     PERS #33: sys   F/ /P  trm: 0 902:system/1000 (fixed)
    948     PERS #32: pers  F/ /P  trm: 0 2925:com.android.systemui/u0a27 (fixed)
    949     PERS #31: pers  F/ /P  trm: 0 3477:com.quicinc.cne.CNEService/1000 (fixed)
    950     PERS #30: pers  F/ /P  trm: 0 3484:com.android.nfc/1027 (fixed)
    951     PERS #29: pers  F/ /P  trm: 0 3502:com.qualcomm.qti.rcsbootstraputil/1001 (fixed)
    952     PERS #28: pers  F/ /P  trm: 0 3534:com.qualcomm.qti.rcsimsbootstraputil/1001 (fixed)
    953     PERS #27: pers  F/ /P  trm: 0 3553:com.android.phone/1001 (fixed)
    954     Proc #25: psvc  F/ /IF trm: 0 4951:com.android.bluetooth/1002 (service)
    955         com.android.bluetooth/.hfp.HeadsetService&lt;=Proc{902:system/1000}
    956     Proc # 0: fore  F/A/T  trm: 0 3586:com.google.android.googlequicksearchbox/u0a29 (top-activity)
    957   Proc #26: vis   F/ /SB trm: 0 3374:com.google.android.googlequicksearchbox:interactor/u0a29 (service)
    958         com.google.android.googlequicksearchbox/com.google.android.voiceinteraction.GsaVoiceInteractionService&lt;=Proc{902:system/1000}
    959 <b>    Proc # 5: vis   F/ /T  trm: 0 3745:com.google.android.gms.persistent/u0a12 (service)</b>
    960 <b>        com.google.android.gms/com.google.android.location.network.NetworkLocationService&lt;=Proc{902:system/1000}</b>
    961     Proc # 3: vis   F/ /SB trm: 0 3279:com.google.android.gms/u0a12 (service)
    962         com.google.android.gms/.icing.service.IndexService&lt;=Proc{947:com.google.android.googlequicksearchbox:search/u0a29}
    963     Proc # 2: vis   F/ /T  trm: 0 947:com.google.android.googlequicksearchbox:search/u0a29 (service)
    964         com.google.android.googlequicksearchbox/com.google.android.sidekick.main.remoteservice.GoogleNowRemoteService&lt;=Proc{3586:com.google.android.googlequicksearchbox/u0a29}
    965     Proc # 1: vis   F/ /T  trm: 0 2981:com.google.process.gapps/u0a12 (service)
    966         com.google.android.gms/.tapandpay.hce.service.TpHceService&lt;=Proc{3484:com.android.nfc/1027}
    967     Proc #11: prcp  B/ /IB trm: 0 3392:com.google.android.inputmethod.latin/u0a64 (service)
    968         com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME&lt;=Proc{902:system/1000}
    969     Proc #24: svc   B/ /S  trm: 0 27071:com.google.android.music:main/u0a67 (started-services)
    970     Proc #22: svc   B/ /S  trm: 0 853:com.qualcomm.qcrilmsgtunnel/1001 (started-services)
    971     Proc # 4: prev  B/ /LA trm: 0 32734:com.google.android.GoogleCamera/u0a53 (previous)
    972     Proc #23: svcb  B/ /S  trm: 0 671:com.qualcomm.telephony/1000 (started-services)
    973     Proc #20: cch   B/ /CE trm: 0 27659:com.android.providers.calendar/u0a2 (provider)
    974         com.android.providers.calendar/.CalendarProvider2&lt;=Proc{27697:com.google.android.calendar/u0a40}
    975     Proc #13: cch   B/ /CE trm: 0 653:com.google.android.gms.wearable/u0a12 (cch-empty)
    976     Proc #10: cch   B/ /S  trm: 0 4067:com.google.android.talk/u0a62 (cch-started-ui-services)
    977     Proc # 7: cch   B/ /S  trm: 0 18868:com.google.corp.huddle.android/u0a95 (cch-started-ui-services)
    978     Proc # 6: cch   B/ /CA trm: 0 27697:com.google.android.calendar/u0a40 (cch-act)
    979     Proc # 8: cch+1 B/ /CA trm: 0 25675:com.google.android.apps.genie.geniewidget/u0a81 (cch-act)
    980     Proc #16: cch+2 B/ /CE trm: 0 1272:com.google.android.keep/u0a106 (cch-empty)
    981     Proc #15: cch+2 B/ /CE trm: 0 885:android.process.media/u0a9 (cch-empty)
    982     Proc #14: cch+2 B/ /CE trm: 0 15146:android.process.acore/u0a3 (cch-empty)
    983     Proc # 9: cch+3 B/ /CA trm: 0 17016:com.google.android.gm/u0a79 (cch-act)
    984     Proc #19: cch+4 B/ /CE trm: 0 973:com.google.android.apps.maps/u0a66 (cch-empty)
    985     Proc #18: cch+4 B/ /CE trm: 0 1091:com.google.android.apps.photos/u0a71 (cch-empty)
    986     Proc #17: cch+4 B/ /CE trm: 0 1141:com.google.android.apps.plus/u0a74 (cch-empty)
    987     Proc #12: cch+5 B/ /CA trm: 0 22299:com.google.android.apps.dogfood/u0a105 (cch-act)
    988     Proc #21: cch+6 B/ /CE trm: 0 995:com.google.android.partnersetup/u0a18 (cch-empty)></pre></p>
    989   </section>
    990 
    991 <h2 id=scans>Scans</h2>
    992 <p>Use the following steps to identify applications performing excessive
    993 Bluetooth Low Energy (BLE) scans:</p>
    994 <ul>
    995 <li>Find log messages for <code>BluetoothLeScanner</code>:
    996 <pre>
    997 $ grep 'BluetoothLeScanner' ~/downloads/bugreport.txt
    998 07-28 15:55:19.090 24840 24851 D BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
    999 </pre></li>
   1000 <li>Locate the PID in the log messages. In this example, "24840" and
   1001 "24851" are PID (process ID) and TID (thread ID).</li>
   1002 <li>Locate the application associated with the PID:
   1003 <pre>
   1004 PID #24840: ProcessRecord{4fe996a 24840:com.badapp/u0a105}
   1005 </pre>
   1006 <p>In this example, the package name is <code>com.badapp</code>.</li>
   1007 <li>Look up the package name on Google Play to identify the responsible
   1008 application:
   1009 <strong>https://play.google.com/store/apps/details?id=com.badapp</strong>.</li>
   1010 </ul>
   1011 <p class=note><strong>Note</strong>: For devices running Android 7.0, the
   1012 system collects data for BLE scans and associates these activities
   1013 with the initiating application. For details, see
   1014 <a href="/devices/tech/power/values.html#le-bt-scans">Low Energy (LE)
   1015 and Bluetooth scans</a>.</p>
   1016 
   1017   </body>
   1018 </html>
   1019