美文网首页Android开发Android学习
查看手机内存阈值及进程的oom_adj值

查看手机内存阈值及进程的oom_adj值

作者: elva_2e24 | 来源:发表于2017-11-14 11:03 被阅读1023次

    查看手机的内存阈值:

    adb shell

    su

    chmod 777 /sys/module/lowmemorykiller/parameters/minfree

    cat /sys/module/lowmemorykiller/parameters/minfree

    得到的数值为:18432,23040,27648,32256,36864,46080

    这6个数值分别代表android系统回收6种进程的阈值,这么看不方便查看,转换为M会更直观,这6个数值的单位为page 1page = 4K,所以通过 数值*4/1024就能转换为M:72M,90M,108M,126M,144M,180M

    也就是说1.前台进程(foreground),2.可见进程(visible),3.次要服务(secondary server),4.后台进程(hidden),5.内容供应节点(content provider),6.空进程(empty)这6类进程进行回收的内存阈值分别为72M,90M,108M,126M,144M,180M

    http://blog.csdn.net/robertcpp/article/details/51628639这篇文章介绍的这6类进程优先级及分类比较详细。

    当内存到180M的时候会将空进程进行回收,当内存到144M的时候把空进程回收完以后开始对内容供应节点进行回收,并不是所有的内容供应节点都回收,而是通过判断它的优先级进行回收,优先级是用oom_adj的值来表示,值越大回收的几率越高

    ps|grep 包名 来得到进程的id

    通过进程id可以查看oom_adj的值:cat /proc/进程id/oom_adj

    看到adj值是0,0就代表这个进程是属于前台进程,我们按下Back键,将应用至于后台,再次查看值为9,如果按home键值为8,不同的手机可能值不太一样。

    adj级别值解释(摘自:http://blog.csdn.net/u013263323/article/details/56285475)

    UNKNOWN_ADJ16预留的最低级别,一般对于缓存的进程才有可能设置成这个级别

    CACHED_APP_MAX_ADJ15缓存进程,空进程,在内存不足的情况下就会优先被kill

    CACHED_APP_MIN_ADJ9缓存进程,也就是空进程

    SERVICE_B_ADJ8不活跃的进程

    PREVIOUS_APP_ADJ7切换进程

    HOME_APP_ADJ6与Home交互的进程

    SERVICE_ADJ5有Service的进程

    HEAVY_WEIGHT_APP_ADJ4高权重进程

    BACKUP_APP_ADJ3正在备份的进程

    PERCEPTIBLE_APP_ADJ2可感知的进程,比如那种播放音乐

    VISIBLE_APP_ADJ1可见进程

    FOREGROUND_APP_ADJ0前台进程

    PERSISTENT_SERVICE_ADJ-11重要进程

    PERSISTENT_PROC_ADJ-12核心进程

    SYSTEM_ADJ-16系统进程

    NATIVE_ADJ-17系统起的Native进程

    备注:(上表的数字可能在不同系统会有一定的出入)

    相关文章

      网友评论

        本文标题:查看手机内存阈值及进程的oom_adj值

        本文链接:https://www.haomeiwen.com/subject/amexvxtx.html