SWT-重启案例分析六

26次阅读

共计 3261 个字符,预计需要花费 9 分钟才能阅读完成。

极力推荐文章:欢迎收藏
Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员 Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、拷贝大文件,IO wait 高,导致 SWT 重启
二、高 IO wait 导致重启的 解决方案

一、拷贝大文件,IO wait 高,导致 SWT 重启

1. 通过 AEE 抓取的log

部分 Log 如下:

2. 高 IO 导致 CPU 使用率过高

部分 Log 如下:

二、高 IO wait 导致重启的 解决方案

##### 1. 调整内核, 优化 IO

通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这种方式执行的效率比较低,但减少了内核组合写操作的机会,降低重启概率发生。

修改 init.rc 文件
文件路径如下:
system/core/rootdir/init.rc

     # Tweak background writeout
     write /proc/sys/vm/dirty_expire_centisecs 200
-    write /proc/sys/vm/dirty_background_ratio  3
-    write /proc/sys/vm/dirty_ratio 10
+    write /proc/sys/vm/dirty_background_ratio  1
+    write /proc/sys/vm/dirty_ratio 2
        
     # Permissions for System Server and daemons.
     chown radio system /sys/android_power/state
2. 关闭 ANR dump 信息

修改 init.aee.customer.rc 文件
修改代码如下:
/vendor/mediatek/proprietary/external/aee/config_external/init.aee.customer.rc

 on init
     export LD_PRELOAD libdirect-coredump.so
     write /proc/self/coredump_filter 39
+       setprop persist.dbg.anrflow 1
 
 on property:vold.decrypt=trigger_restart_framework
     restart debuggerd
3. 关闭 wtf dump 文件 log 信息

当拷贝大型文件到手机中 (5G 以上),此时手机IO wait 会很高,此时Dump ANR wtf 等信息,会严重影响到 IO wait ,如果系统超过 1 分钟 无响应,看门狗会自动重启手机,故在 高 IO wait 的情况下,建议可以关闭 dump信息,缓解一下 CPU 负载过高的问题。

注释掉 AMS 中的 Log 打印
ActivityManagerService 代码路径如下:
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService

 public final class ActivityManagerService extends ActivityManagerNative

                 // should be protected to avoid security holes, so yell loudly

                 // to ensure we examine these cases.

                 if (callerApp != null) {

-                    Log.wtf(TAG, "Sending non-protected broadcast" + action

-                            + "from system" + callerApp.toShortString() + "pkg" + callerPackage,

-                            new Throwable());

+                                       // add for copy 5G file reboot 

+                                       android.util.Log.e("wangjie","Sending non-protected broadcast cause reboot pkg"+callerPackage);                

+                    //Log.wtf(TAG, "Sending non-protected broadcast" + action

+                     //       + "from system" + callerApp.toShortString() + "pkg" + callerPackage,

+                      //      new Throwable());

+                                       // add for copy 5G file reboot          

                 } else {

-                    Log.wtf(TAG, "Sending non-protected broadcast" + action

-                            + "from system uid" + UserHandle.formatUid(callingUid)

-                            + "pkg" + callerPackage,

-                            new Throwable());

-                }

+                                       // add for copy 5G file reboot 

+                                       android.util.Log.e("wangjie","Sending non-protected broadcast cause reboot pkg"+callerPackage);        

+                    //  Log.wtf(TAG, "Sending non-protected broadcast" + action

+                    //        + "from system uid" + UserHandle.formatUid(callingUid)

+                   //         + "pkg" + callerPackage,

+                   //         new Throwable());

+                                  // add for copy 5G file reboot 

+                }

+                               

+                               // add for copy 5G file reboot 

             }

         } else {

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

正文完
 0