MTK system_server 卡死导致手机重启案例分析

这篇具有很好参考价值的文章主要介绍了MTK system_server 卡死导致手机重启案例分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MTK system_server 卡死导致手机重启案例分析,智能手机

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、MTK AEE Log分析工具
二、AEE Log分析流程
三、system_server 卡死案例分析及解决

本文主要针对 Exception Type: system_server_watchdog , system_server卡死找出的分析以及解决方案。

一、MTK AEE Log分析工具

MTK AEE Log 获取方式:

程序员Android
回复 aee 即可获取解析重启db log的工具。

二、AEE Log分析流程

1. 使用AEE 工具解析 dbg 文件。

MTK system_server 卡死导致手机重启案例分析,智能手机

使用解析db.fatal.02.SWT.dbg

MTK system_server 卡死导致手机重启案例分析,智能手机

AEE Log 解析出来的文件

2.分析解析出来的exp_main等文件

exp_main 文件会记录发生重启时候的 log 打印信息。

部分重启异常 Log信息如下:

$** *** *** *** *** *** *** *** Fatal *** *** *** *** *** *** *** **$
Build Info: 'alps-mp-o1.mp7:alps-mp-o1.mp7:mt6765:S01,ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys'
Flavor Info: 'None'
Exception Log Time:[Thu Mar 14 14:00:03 CST 2019] [38684.729626]

Exception Class: SWT
Exception Type: system_server_watchdog

Current Executing Process: 
system_server


Trigger time:[2019-03-14 14:00:03.711844] pid:1029

Backtrace: 
Process: system_server
Subject: Blocked in handler on ActivityManager (ActivityManager)
Build: ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys

3.exp_main 文件解析

从开头的Log总体信息概览,我们可以看到 发生重启的时间类型触发重启的进程以及PID系统Blocked 的地方

结合exp_main以及 trace分析重启 Log
Log分析如下:

// 1.重启触发时间,以及PID 
Trigger time:[2019-03-14 14:00:03.711844] pid:1029
// 2.Blocked 的进程
Backtrace: 
Process: system_server
Subject: Blocked in handler on ActivityManager (ActivityManager)
// 3.根据PID 查看Trace信息
----- pid 1029 at 2019-03-14 13:59:58 -----
Cmd line: system_server

... ...
// 4.根据Backtrace 查看Blocked的信息
"ActivityManager" prio=5 tid=11 Blocked

... ...
// 5.tid=11 等待 tid=106的线程释放资源锁
  - waiting to lock <0x090691f3> (a android.util.ArrayMap) held by thread 106  
... ...

// 6.查看tid = 106 持锁情况
"backup" prio=5 tid=106 Waiting
... ... 

  at java.lang.Object.wait(Native method)
  - waiting on <0x06a44c62> (a com.android.server.am.ContentProviderRecord)
// 7.死锁卡住的地方
  at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:12127)
  - locked <0x06a44c62> (a com.android.server.am.ContentProviderRecord)
  
  ...  ...

"Binder:1029_8" prio=5 tid=107 Blocked
// 8.log中  tid=107 被 106 Blocked 进一步问题的加重
  at com.android.server.notification.RankingHelper.getRecord(RankingHelper.java:258)
  - waiting to lock <0x090691f3> (a android.util.ArrayMap) held by thread 106
  
$** *** *** *** *** *** *** *** Fatal *** *** *** *** *** *** *** **$

MTK system_server 卡死导致手机重启案例分析,智能手机

Log 分析大致过程截图

完整 log 请在公众号上获取

三、system_server 卡死案例分析及解决

通过 Log 找到卡死原因后,解决此问题。
需要修改ActivityManagerService类。

1.修改代码路径如下:alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

2.解决思路

避免 provider 长时间持锁触发MTK 60s 的SWT 重启机制,设置超时时间,超过时间就要释放资源锁,避免发生此问题。

3.diff 修改方案如下:

--- a/[alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c)

+++ b/[alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444)

@@ [-545,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l545) [+545,9](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l545) @@ public class ActivityManagerService extends IActivityManager.Stub

     // How long we wait for an attached process to publish its content providers

     // before we decide it must be hung.

     static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000;

-

+    // How long we wait for provider to be notify before we decide it may be hung.

+    static final int CONTENT_PROVIDER_WAIT_TIMEOUT = 20*1000;

+       

     // How long we wait for a launched process to attach to the activity manager

     // before we decide it's never going to come up for real, when the process was

     // started with a wrapper for instrumentation (such as Valgrind) because it

@@ [-1745,6](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l1745) [+1747,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l1747) @@ public class ActivityManagerService extends IActivityManager.Stub

     static final int PUSH_TEMP_WHITELIST_UI_MSG = 68;

     static final int SERVICE_FOREGROUND_CRASH_MSG = 69;

     static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70;

+        static final int CONTENT_PROVIDER_WAIT_TIMEOUT_MSG = 71;

     static final int START_USER_SWITCH_FG_MSG = 712;

     static final int NOTIFY_VR_KEYGUARD_MSG = 74;

@@ [-2108,6](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l2108) [+2111,12](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l2111) @@ public class ActivityManagerService extends IActivityManager.Stub

                 synchronized (ActivityManagerService.this) {

                     mActivityStarter.doPendingActivityLaunchesLocked(true);

                 }

+            } break;

+                       case CONTENT_PROVIDER_WAIT_TIMEOUT_MSG: {

+                ContentProviderRecord cpr = (ContentProviderRecord)msg.obj;

+                synchronized (ActivityManagerService.this) {

+                    processContentProviderWaitTimedOutLocked(cpr);

+                }

             } break;

             case KILL_APPLICATION_MSG: {

                 synchronized (ActivityManagerService.this) {

@@ [-7029,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l7029) [+7038,31](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l7038) @@ public class ActivityManagerService extends IActivityManager.Stub

         cleanupAppInLaunchingProvidersLocked(app, true);

         removeProcessLocked(app, false, true, "timeout publishing content providers");

     }

+       

+    @GuardedBy("this")

+    private final void processContentProviderWaitTimedOutLocked(ContentProviderRecord cpr) {

+        try {

+            if (mLaunchingProviders.contains(cpr)) {

+                if (DEBUG_MU) Slog.v(TAG_MU,

+                    "Remove from mLaunchingProviders, " + cpr

+                    + " launchingApp=" + cpr.launchingApp);

+                mLaunchingProviders.remove(cpr);

+            }

+            if (DEBUG_MU) Slog.v(TAG_MU,

+                "RemoveMessages CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, " + cpr

+                + " launchingApp=" + cpr.launchingApp);

+            mHandler.removeMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr);

+            synchronized (cpr) {

+                cpr.notifyAll();

+                cpr.launchingApp = null;

+            }

+        } catch (Exception e) {

+            if (DEBUG_MU) Slog.v(TAG_MU,

+                "processContentProviderWaitTimedOutLocked exception, " + e);

+        }

+    }

+       

     private final void processStartTimedOutLocked(ProcessRecord app) {

         final int pid = app.pid;

         boolean gone = false;

@@ [-12124,11](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l12124) [+12157,33](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l12157) @@ public class ActivityManagerService extends IActivityManager.Stub

                     if (conn != null) {

                         conn.waiting = true;

                     }

+                                       // add 20s wait timeout,avoid 

+                    if (!mHandler.hasMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr)) {

+                        if (DEBUG_MU) Slog.v(TAG_MU,

+                            "SendMessageDelayed CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, " + cpr

+                            + " launchingApp=" + cpr.launchingApp);

+                        Message msg = mHandler.obtainMessage(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG);

+                        msg.obj = cpr;

+                        mHandler.sendMessageDelayed(msg, CONTENT_PROVIDER_WAIT_TIMEOUT);

+                    } else {

+                        if (DEBUG_MU) Slog.v(TAG_MU,

+                            "There is another waiting to start provider " + cpr

+                            + " launchingApp=" + cpr.launchingApp

+                            + ", not send CONTENT_PROVIDER_WAIT_TIMEOUT_MSG again");

+                    }

+                                       

                     cpr.wait();

                 } catch (InterruptedException ex) {

                 } finally {

                     if (conn != null) {

                         conn.waiting = false;

+                    }

+                                       // remove wait time out message

+                    if (mHandler.hasMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr)) {

+                        if (DEBUG_MU) Slog.v(TAG_MU,

+                            "After wait removeMessages CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, "

+                            + cpr + " launchingApp=" + cpr.launchingApp);

+                            mHandler.removeMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr);

                     }

                 }

             }

参考文献:

【腾讯文档】Android Framework 知识库
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点击阅读原文,为大佬点赞!文章来源地址https://www.toymoban.com/news/detail-623155.html

到了这里,关于MTK system_server 卡死导致手机重启案例分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 虚拟机卡死(关闭电源,任务管理器杀进程,重启电脑均无效),强制重启解决方法

    编号:VM-00001 环境 :win10专业版 + VMware® Workstation 17 Player(17.0.1 build-21139696)+ Ubuntu 22.04.2 LTS 现象 :虚拟机运行死机(桌面点不动,SSH命令行连不上),通过(1)虚拟机的电源--关闭客户机,提示系统忙,无法关闭;(2)任务管理器杀掉vmplayer进程,之后重启vmplayer,运行

    2024年04月15日
    浏览(45)
  • 重启docker卡死问题解决systemctl start docker卡住不动

    异常 Active: activating (start) 把这些都给kill了,气死我了,弄好几天 命令 正常 docker出问题就去看 很有效,如果显示找不到命令,很可能是docker没有安装好

    2024年02月16日
    浏览(58)
  • Unity Android 长时间运行导致卡死的BUG

            最近项目中遇到一个问题,Unity 项目打包成 Android 长时间运行会导致 App 卡死。该问题出现在Unity 2021.3.19其他版本不详,由于项目中引入了arr库所以查找问题比较难受。 好在搞安卓的同事帮忙研究了一下,发现App在运行期间吃满单核CPU的算力。         明确原

    2024年02月11日
    浏览(37)
  • 服务器卡死,ssh连接不上-finalshell导致

    问题:客户反馈服务器ssh连接不上 设备信息:Asianux Server release 7.3.1512(Lotus) 定位:通过虚拟机控制台重启服务器,发现能登录虚拟机,查看服务器各种状态都正常。 客户使用一段时间后又卡死,ssh连接不上,登录发现进程数有一万多个,导致内存不足,服务器卡断 查看进

    2024年02月03日
    浏览(90)
  • element table数据量太大导致网页卡死崩溃

    做后台项目时,一次性在表格中加载几百上千条数据,发现有时页面会崩溃。究其原因,发现是一次渲染dom太多导致卡顿。 在此尝试了多种解决方法,发现最优的就是替换组件,elementUI中的表格组件el-table性能不优,数据量大的时候,尤其是可操作表格,及其容易卡顿。在这

    2023年04月26日
    浏览(78)
  • STM32中MicroLIB的关闭为什么会导致卡死----解析

    大家好我是 MHZ 。最近又开始往回捡单片机的知识了~ 之前大学的时候都没用过 STM 的 CubeMX,这会拿来用着感觉很方便啊~ 果然科技在进步! 在开发使用 Keil 对 STM32 进行开发的时候在会有一个叫做 MicroLIB 的选项。 这个的具体原因我搜索了一下一些文章,就是说这个会是的 K

    2024年03月22日
    浏览(78)
  • 因误删文件导致CentOS7开机卡死无法进入图形登录界面

    目录 1、背景 2、解决步骤         这几天在清理电脑,需要删除虚拟机,为此写下了Linux系统下卸载VMware Workstation软件_nanke_yh的博客-CSDN博客,但是同时怕有残留,自己全局搜索了vm,删除了部分带有vm的文件。删除后文件在回收站内。此时,由于vm的文件过多,想着重启电

    2024年02月09日
    浏览(49)
  • PyQt5 执行耗时操作导致界面卡死或未响应的解决办法

    当用PyQt5开发一个GUI界面 ,需要执行业务逻辑时,后台逻辑执行时间长,界面就容易出现卡死、未响应等问题。 在PyQt中,GUI界面本身就是一个处理事件循环的主线程,当进行耗时操作时,主线程GUI需要等待操作完成后才会响应,在等待这段时间,整个GUI就处于卡死的状态。

    2024年02月09日
    浏览(41)
  • FreeRTOS中断调用API消息队列发送函数导致系统死机(memcpy函数卡死)

    背景:写一组在FreeRTOS系统下的串口驱动 ,芯片使用的是杰发科的 AC781x系列 , ARM® CortexM3 内核,96MHz主频。 项目场景:计划使用dma接收数据,设置dma半满中断与全满中断,在半满中断中把前半部分数据传入消息队列,在全满中断中把后半部分数据传入消息队列。 问题1: 在中

    2024年02月15日
    浏览(47)
  • 解决vscode 【code helper (plugin)】 占用CPU超过 100% 导致卡死的问题。

    VsCode 版本: 1.79.2 (Universal) MacOs 版本:13.2.1 (22D68) 芯片:Apple M2 Pro 打开mac监视器 ,查看cpu运行的code helper (plugin); 双击 查看code helper (plugin) 找到 打开的文件和端口 ; 这里可以留意查看 被圈起来的内容。 这就是大概率影响你CPU的插件 你可以尝试 逐一卸载/禁用 , 直到找到

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包