客户报的问题:后台在下载多个应用时,正常使用设备,发生"System UI isn’t responding"
问题分析如下:
system ui crash\ap\072-0806_093411--0806_094109\0-android_events.log
搜索am_anr
Line 5865: E00E719 08-06 09:35:21.276 1307 17651 I am_anr : [0,17442,com.mhbl.sastasundar,819510852,Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=com.mhbl.sastasundar cmp=com.mhbl.sastasundar/io.invertase.firebase.messaging.ReactNativeFirebaseMessagingReceiver (has extras) }]
Line 5995: E00FAF1 08-06 09:35:36.675 1307 18319 I am_anr : [0,17942,in.AajTak.headlines,685260356,Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=in.AajTak.headlines cmp=in.AajTak.headlines/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) }]
Line 6116: E010678 08-06 09:35:47.575 1307 18743 I am_anr : [0,4396,com.android.vending,684375749,Input dispatching timed out (Application does not have a focused window)]
Line 6371: E013A4B 08-06 09:36:20.150 1307 18743 I am_anr : [0,18568,com.apollo.patientapp,685260356,Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=com.apollo.patientapp cmp=com.apollo.patientapp/io.invertase.firebase.messaging.ReactNativeFirebaseMessagingReceiver (has extras) }]
Line 6485: E014760 08-06 09:36:26.195 1307 18743 I am_anr : [0,19033,in.AajTak.headlines,685260356,Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=in.AajTak.headlines cmp=in.AajTak.headlines/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) }]
Line 6725: E0166AB 08-06 09:36:39.072 1307 20319 I am_anr : [0,19902,com.ak.ta.dainikbhaskar.activity,953695812,Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=com.ak.ta.dainikbhaskar.activity cmp=com.ak.ta.dainikbhaskar.activity/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) }]
Line 6895: E017290 08-06 09:36:45.650 1307 20319 I am_anr : [0,1307,system,818462217,Input dispatching timed out (PointerEventDispatcher0 (server) is not responding. Waited 5000ms for MotionEvent)]
Line 7157: E01A0BE 08-06 09:37:20.289 1307 20319 I am_anr : [0,1681,com.android.systemui,818462221,Input dispatching timed out (e29fba5 StatusBar (server) is not responding. Waited 6023ms for MotionEvent)]
可以看到短时间内连续发生多次进程的ANR,类似于这种连续的ANR需要分析第一次的ANR原因,先解决掉第一次ANR再测试此问题是否还会再次复现。
system ui crash\ap\072-0806_093411--0806_094109\0-android.log
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: ANR in com.mhbl.sastasundar
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: PID: 17442
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: Reason: Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=com.mhbl.sastasundar cmp=com.mhbl.sastasundar/io.invertase.firebase.messaging.ReactNativeFirebaseMessagingReceiver (has extras) }
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: ErrorId: 1ded8b71-9f0d-4d01-8085-a9baf5f62390
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: Frozen: false
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: Load: 0.0 / 0.0 / 0.0
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: ----- Output from /proc/pressure/memory -----
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: some avg10=85.33 avg60=64.56 avg300=30.32 total=123868296
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: full avg10=22.26 avg60=16.60 avg300=7.95 total=33631546
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: ----- End output from /proc/pressure/memory -----
可以看到/proc/pressure/memory的压力值比较大
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: CPU usage from 92780ms to 0ms ago (2024-08-06 09:33:47.502 to 2024-08-06 09:35:20.282):
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: 90% 141/kswapd0: 0% user + 90% kernel
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: 73% 1307/system_server: 33% user + 39% kernel / faults: 110822 minor 93200 major
S00EAA9 08-06 09:35:24.170 1307 17651 E ActivityManager: 34% 1681/com.android.systemui: 15% user + 19% kernel / faults: 33159 minor 33227 major
S00EAAE 08-06 09:35:24.170 1307 17651 E ActivityManager: 96% TOTAL: 27% user + 59% kernel + 5.2% iowait + 2.1% irq + 2% softirq
查看连续几次ANR的Cpu Total值都在96% 98% 100%,iowait值并不高,且kswapd0占Top2,基本可以确认此问题是Low Memory问题。
Line 35221: M007E8F 08-06 09:34:31.910 340 340 I lowmemorykiller: Kill 'com.google.android.apps.youtube.music' (11735), uid 10138, oom_score_adj 999 to free 24636kB rss, 52812kB swap; reason: min watermark is breached and swap is low (450964kB < 455992kB)
Line 35412: M007F29 08-06 09:34:32.311 340 340 I lowmemorykiller: Kill 'com.google.process.gapps' (4451), uid 10113, oom_score_adj 999 to free 21208kB rss, 49980kB swap; reason: low watermark is breached and swap is low (448800kB < 455992kB)
Line 35423: M007F34 08-06 09:34:32.359 340 340 I lowmemorykiller: Kill 'com.google.android.deskclock' (2416), uid 10118, oom_score_adj 999 to free 21016kB rss, 52988kB swap; reason: min watermark is breached even after kill
Line 35438: M007F43 08-06 09:34:32.481 340 340 I lowmemorykiller: Kill 'com.android.vending:background' (5049), uid 10114, oom_score_adj 999 to free 20428kB rss, 59776kB swap; reason: low watermark is breached and swap is low (453948kB < 455992kB)
Line 35741: M008072 08-06 09:34:32.962 340 340 I lowmemorykiller: Kill 'com.google.android.cellbroadcastreceiver' (2063), uid 10168, oom_score_adj 999 to free 20320kB rss, 50524kB swap; reason: low watermark is breached and swap is low (455692kB < 455992kB)
Line 35985: M00815C 08-06 09:34:33.637 340 340 I lowmemorykiller: Kill 'com.facebook.system' (6873), uid 10079, oom_score_adj 999 to free 20144kB rss, 49068kB swap; reason: low watermark is breached and swap is low (453472kB < 455992kB)
Line 36039: M008192 08-06 09:34:33.797 340 340 I lowmemorykiller: Kill 'com.google.android.apps.maps' (8274), uid 10133, oom_score_adj 999 to free 55584kB rss, 64452kB swap; reason: low watermark is breached and swap is low (453744kB < 455992kB)
Line 36178: M00821D 08-06 09:34:33.999 340 340 I lowmemorykiller: Kill 'com.android.camera2' (9099), uid 10160, oom_score_adj 999 to free 19804kB rss, 48360kB swap; reason: low watermark is breached and swap is low (452024kB < 455992kB)
Line 36316: M0082A7 08-06 09:34:34.198 340 340 I lowmemorykiller: Kill 'com.android.externalstorage' (8210), uid 10068, oom_score_adj 999 to free 19704kB rss, 48868kB swap; reason: low watermark is breached and swap is low (454868kB < 455992kB)
Line 37361: M00869F 08-06 09:34:35.667 340 340 I lowmemorykiller: Kill 'com.android.traceur' (4787), uid 10081, oom_score_adj 999 to free 19416kB rss, 49152kB swap; reason: min watermark is breached and swap is low (449484kB < 455992kB)
Line 37394: M0086B4 08-06 09:34:35.774 340 340 I lowmemorykiller: Kill 'com.sprd.providers.photos' (7332), uid 10067, oom_score_adj 999 to free 19340kB rss, 49356kB swap; reason: low watermark is breached and swap is low (449724kB < 455992kB)
Line 37481: M00870B 08-06 09:34:35.918 340 340 I lowmemorykiller: Kill 'com.nis.app' (14288), uid 10217, oom_score_adj 999 to free 46980kB rss, 70508kB swap; reason: low watermark is breached and swap is low (455616kB < 455992kB)
Line 41041: M0094AD 08-06 09:34:39.177 340 340 I lowmemorykiller: Kill 'com.google.android.ondevicepersonalization.services' (10031), uid 10208, oom_score_adj 999 to free 19704kB rss, 49864kB swap; reason: low watermark is breached and swap is low (455340kB < 455992kB)
Line 41172: M009530 08-06 09:34:39.424 340 340 I lowmemorykiller: Kill 'com.myntra.android' (13820), uid 10026, oom_score_adj 999 to free 19504kB rss, 88780kB swap; reason: low watermark is breached and swap is low (453092kB < 455992kB)
Line 41346: M0095DE 08-06 09:34:39.623 340 340 I lowmemorykiller: Kill 'com.android.soundrecorder' (8027), uid 10159, oom_score_adj 999 to free 19184kB rss, 48844kB swap; reason: low watermark is breached and swap is low (451460kB < 455992kB)
Android log中搜索[lowmemorykiller: Kill '](lowmemorykiller: Kill ') 可以看到LMKD在频繁大量的kill进程
解决方案:优化Low Memory
设备RAM本身比较小:3GB
C:\Users\Administrator>adb shell free -h
total used free shared buffers
Mem: 2.6G 2.5G 79M 8.1M 1.6M
-/+ buffers/cache: 2.5G 80M
Swap: 1.3G 531M 834M
1.优化系统进程内存占用
2.减少reserved memory
1.2这两项一般很少修改
3.查看是否有进程发生内存泄漏(这个之前有一个项目的一个三方App发生存在泄露,占用Memory1.5G)
4.限制后台进程数量
/idh.code/frameworks/base/services/core/java/com/android/server/am/ActivityManagerConstants.java
- private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
+ private static final int DEFAULT_MAX_CACHED_PROCESSES = 16;
/idh.code/frameworks/base/services/core/java/com/android/server/am/ProcessList.java
long getCachedRestoreThresholdKb() {
- return mCachedRestoreLevel;
+ return mCachedRestoreLevel/2;
}
Return the maximum pss size in kb that we consider a process acceptable to
restore from its cached state for running in the background when RAM is low.
5.调整LMKD的参数
/idh.code/device/sprd/mpool/module/vendor/memory/lmkd/mversion/full.mk
PRODUCT_VENDOR_PROPERTIES += \
ro.lmk.filecache_min_kb = 153600 \
- ro.lmk.psi_complete_stall_ms = 500
+ ro.lmk.psi_complete_stall_ms = 550 \
+ ro.lmk.psi_partial_stall_ms = 150 \
+ ro.lmk.kill_heaviest_task = true
6.swap分区扩大,增加逻辑内存大小
MTK
/device/mediatek/mt6xxx/
/dev/block/zram0 none swap defaults zramsize=xx% 把值或百分比调大
展锐
/idh.code/device/sprd/mpool/module/generic/partition/mversion/go/go.mk
+UNISOC_FSTAB_FLAG_ZRAMSIZE ?= zramsize=62%