zoukankan      html  css  js  c++  java
  • SWT 重启案例分析(六)

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

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

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

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

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

    1.通过 AEE 抓取的log

    部分 Log 如下:
    Aee log

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

    部分 Log 如下:
    Block IO 很高导致重启

    二、高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 {
    
    

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

    微信关注公众号:  程序员Android,领福利

  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/wangjie1990/p/11326946.html
Copyright © 2011-2022 走看看