Process com.xxxxxxxx has died

本文记录了一次针对Android应用内存使用的排查过程,应用内存占用逐渐增大最终导致被系统回收的问题。通过使用MAT和HEAP未发现明显内存溢出,进一步利用adb shell procrank观察进程内存使用情况,并尝试通过清理HashMap来解决问题。

应用占用内存越来越大 导致其他应用被kill,  最后这个前台应用直接退出


使用MAT 和 HEAP 没有发现内存溢出


使用adb shell procrank 观察PSS 内存使用, 发现内存PSS越来越大.

map.clear();map = null; 每次创建新的map时候清除之前的hash map


08-20 11:04:47.669   997 30851 I ActivityManager: Low on memory:
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     5695 kB: mediaserver (276) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     4806 kB: zygote (288) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     4052 kB: surfaceflinger (287) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     2234 kB: drmserver (289) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     2132 kB: rild (286) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     1652 kB: mm-qcamera-daemon (436) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     1554 kB: gsiff_daemon (439) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N     1066 kB: wpa_supplicant (1447) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      893 kB: cnd (431) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      854 kB: sensors.qcom (401) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      799 kB: ims_rtp_daemon (849) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      736 kB: netd (283) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      703 kB: system_monitor (839) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      608 kB: vold (275) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      598 kB: audiod (441) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      582 kB: netmgrd (368) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      519 kB: fast-dormancy (313) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      514 kB: sdcard (434) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      500 kB: imsdatadaemon (446) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      490 kB: qmuxd (364) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      475 kB: /init (1) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      461 kB: iddd (280) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      429 kB: credmgrd (308) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      394 kB: time_daemon (437) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      368 kB: illumination_service (281) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      366 kB: modem-debug (312) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      356 kB: wcnss_service (443) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      348 kB: qcom-system-daemon (292) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      336 kB: imsqmidaemon (301) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      303 kB: keystore (291) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      298 kB: sh (365) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      291 kB: battery_logging (2896) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      270 kB: ueventd (163) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      240 kB: auditd (317) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      236 kB: crashmonitorns (309) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      236 kB: adbd (848) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      234 kB: ssr_diag (435) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      232 kB: debuggerd (285) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      232 kB: mpdecision (2902) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      229 kB: suntrold (396) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      227 kB: rfs_access (278) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      211 kB: idd-logreader (429) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      207 kB: rmt_storage (445) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      200 kB: qseecomd (476) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      199 kB: ta_qmi_service (271) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      196 kB: dhcpcd (21325) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      176 kB: tad_static (165) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      171 kB: sct_service (272) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      171 kB: scd (304) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      170 kB: xssm (310) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      144 kB: healthd (273) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      143 kB: installd (290) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      138 kB: adsprpcd (299) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      130 kB: servicemanager (274) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      129 kB: remote_vold (282) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      110 kB: fota-trigger (2898) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N      108 kB: qseecomd (440) native
08-20 11:04:47.669   997 30851 I ActivityManager:   ntv   N       64 kB: ssrapp (305) native
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P    38493 kB: system (997) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P    35461 kB: com.android.systemui (1230) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P    15211 kB: com.sonyericsson.devicemonitor (1513) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P    14715 kB: com.android.phone (1501) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P     7808 kB: com.android.nfc (1537) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   pers  P     5070 kB: com.sonyericsson.android.wakeup (1528) fixed
08-20 11:04:47.669   997 30851 I ActivityManager:   fore  T   161963 kB: com.-----------home (29651) top-activity
08-20 11:04:47.669   997 30851 I ActivityManager:   vis   IF   19973 kB: com.google.process.location (29417) service
08-20 11:04:47.669   997 30851 I ActivityManager:                        com.google.android.backuptransport/com.google.android.backup.BackupTransportService<=Proc{997:system/1000}
08-20 11:04:47.669   997 30851 I ActivityManager:   vis   IF    2847 kB: com.android.smspush (30026) service




 PID       Vss               Rss         Pss              Uss  cmdline

3523   876148K  217852K  168764K  150532K  com.-----------home
 997   693624K   72540K   43142K   41108K  system_server
1230   580636K   60512K   33072K   31280K  com.android.systemui
3311   579024K   58392K   23556K   19440K  com.sonyericsson.home
3285   560148K   51260K   18279K   15220K  com.google.process.location
3739   536060K   44408K   12418K   10452K  com.orangelabs.rcs
3324   549984K   44772K   11117K    7936K  com.google.process.gapps
1501   544832K   36420K   10318K    9252K  com.android.phone
3615   523268K   39656K    9307K    7904K  com.sonymobile.phoneusage
1513   522792K   34152K    8710K    7692K  com.sonyericsson.devicemonitor
3432   539228K   38064K    7929K    5516K  com.google.android.googlequicksearchbox:search
3562   536220K   38444K    7667K    6244K  com.sonymobile.camerawidget
3929   536324K   37560K    7636K    6016K  com.android.calendar
1537   545732K   32960K    7303K    6268K  com.android.nfc
3773   524256K   37740K    6979K    5500K  android.process.acore
3349   543540K   39484K    6707K    3696K  com.google.android.gms
3882   525988K   36636K    5992K    4420K  android.process.media
 276    55012K    6256K    5592K    5532K  /system/bin/mediaserver
3475   527140K   35380K    5454K    3868K  com.sonyericsson.textinput.uxp
1528   519660K   30124K    4841K    3856K  com.sonyericsson.android.wakeup




11530   590460K   53020K   17666K   14620K  com.-----------home
11530   614072K   73760K   38431K   35228K  com.-----------home
11530   841992K  188464K  153453K  146220K  com.-----------home
11530   852152K  193020K  158168K  150584K  com.-----------home
11530   868404K  201484K  167938K  160356K  com.-----------home
11530   894728K  214104K  182384K  174556K  com.-----------home


remove setpoints
16287   607484K   71008K   34983K   30128K  com.-----------home
16287   621928K   83960K   48088K   43368K  com.-----------home
16287   622704K   84808K   48936K   44216K  com.-----------home
16287   623520K   86148K   49984K   44964K  com.-----------home
16287   623780K   86256K   50060K   45008K  com.-----------home
16287   624088K   86732K   50530K   45492K  com.-----------home
16287   624108K   86776K   50818K   45584K  com.-----------home


not create map in setpoints
21125   821984K  180212K  139493K  128564K  com.-----------home
21125   848828K  193832K  152910K  142152K  com.-----------home
21125   877420K  208408K  167592K  156756K  com.-----------home
21125   922240K  230724K  193830K  179840K  com.-----------home
21125   957784K  247488K  211615K  198688K  com.-----------home




31203   627476K   86408K   52569K   49196K  com.-----------home
31203   627516K   86404K   52389K   48996K  com.-----------home
31203   627644K   86396K   52386K   48904K  com.-----------home


HashMap<String, Object> map, mylist.clear();map.clear();map = null;
 3848   627400K   85484K   51511K   47952K  com.-----------home
 3848   627136K   85476K   51586K   48004K  com.-----------home
 3848   627336K   85704K   51759K   48116K  com.-----------home
 3848   642484K   97816K   63570K   59516K  com.-----------home
 3848   646916K  101584K   67344K   63312K  com.-----------home
 3848   643848K   98568K   64328K   60296K  com.-----------home
 3848   653836K  106820K   72424K   68100K  com.-----------home
 3848   654232K  107084K   72826K   68484K  com.-----------home
 3848   649296K  103568K   69400K   65148K  com.-----------home
 3848   648096K  102944K   68806K   64584K  com.-----------home
 3848   647172K  101236K   66688K   62708K  com.-----------home
在 Android 系统日志中,`ActivityManager: Process xxx has died` 是常见的日志条目,用于表示某个应用进程已经终止。这类日志通常由 `ActivityManagerService`(简称 AMS)记录,用于追踪应用进程的生命周期状态变化。当一个进程被系统终止时,AMS 会触发一系列清理操作,并记录该事件。 ### Process died 日志的结构 典型的日志格式如下: ``` I ActivityManager: Process com.test.xxx (pid 2376) has died ``` 其中: - `com.test.xxx` 是应用的包名。 - `pid 2376` 表示该进程的进程 ID。 - `has died` 表示该进程已经死亡。 ### 日志中提到的 `vis` 和 `BFGS` 在某些日志中,你会看到类似以下的内容: ``` Process com.test.xxx (pid 2376) has died: vis +99TOP ``` 这里的 `vis +99TOP` 表示该进程的优先级状态。Android 使用一套 OOM(Out Of Memory)机制来管理进程的优先级和内存回收策略。每个进程都有一个 OOM Score,数值越低表示优先级越高,越不容易被系统杀死。 - `vis` 表示该进程是一个可见进程(VISIBLE_APP)。 - `+99TOP` 表示该进程是前台进程(TOP foreground app),通常具有较高的优先级。 这些标记帮助开发者判断进程被杀死时的上下文,例如是否为前台进程、是否处于可见状态等。 ### 进程死亡的常见原因 进程死亡可能由多种原因触发,包括但不限于: - **正常退出**:例如用户关闭应用或调用 `finish()` 方法。 - **系统资源不足**:当系统内存不足时,低优先级的进程可能被系统杀死以释放资源。 - **应用崩溃**:如果应用发生未捕获的异常或 Native 崩溃(如 SIGSEGV),进程会被系统终止。 - **系统重启或升级**:在系统重启或应用更新时,相关进程会被终止。 - **权限或安全策略**:某些安全机制(如 SELinux)可能导致进程被强制终止。 ### 日志分析示例 参考引用中的日志片段: ``` 08-12 16:48:40.453 773 908 I ActivityManager: Process com.test.xxx (pid 2376) has died 08-12 16:48:40.453 773 908 D ActivityManager: SVC-handleAppDiedLocked: app = ProcessRecord{19911aa7 2376:com.test.xxx/u0a41}, app.pid = 2376 ``` 这段日志表明: - 进程 `com.test.xxx`(PID 2376)已经死亡。 - `handleAppDiedLocked` 是 AMS 中处理进程死亡的核心方法之一,它会清理与该进程相关的资源,并通知其他组件。 ### 进程死亡的处理流程 当 AMS 检测到进程死亡时,会执行以下操作: 1. **清理 Activity 状态**:调用 `destroyActivityLocked()` 方法销毁与该进程相关的 Activity [^2]。 2. **更新进程优先级**:重新计算系统中其他进程的 OOM Score。 3. **广播通知**:发送 `ACTION_PACKAGE_RESTARTED` 等广播,通知其他应用该进程已终止。 4. **启动恢复机制**:如果该进程是服务或广播接收器,系统可能会尝试重新启动它。 ### 相关问题 - `ActivityManager: Process has died` 日志中 `adj` 字段的含义是什么? - 如何通过 `dumpsys meminfo` 分析进程的内存使用情况? - Android 系统如何决定哪些进程在内存不足时被杀死? - 如何通过 `logcat` 过滤特定包名的进程死亡日志? - 如何区分进程是由于系统资源不足被杀死还是应用自身崩溃导致的死亡?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值