美文网首页Android开发程序员Android知识
Android系统在小内存下的使用

Android系统在小内存下的使用

作者: 网路元素 | 来源:发表于2017-09-10 11:27 被阅读210次

最近在调试的方案,硬件配置是512MB的DDR,这在Android4.4这号称优化很大的系统版本上运行还是很吃力,找了一些资料,发现我们的方案上使用到了ZRAM这一技术,直接使用压缩内存来作为交换分区,其中涉及到的内核配置如下:

CONFIG_SWAP=y

CONFIG_CGROUP_MEM_RES_CTLR=y

CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y

CONFIG_ZRAM=y

CONFIG_ZSMALLOC=y

接下来运行起来后(如上述编译失败,需要把SYSFS和BLOCK相关配置加上),可以看到有/dev/block/zram0 这一结点,然后我们的方案在init.rc里加了一个service,其为oneshot类型,就是执行一个脚本了,脚本内容如下:

#!/system/bin/sh

echo $((256*1024*1024))> /sys/block/zram0/disksize

mkswap /dev/block/zram0

swapon /dev/block/zram0

sleep 1

mkfs.ext2 -b 4096 /dev/block/zram0

sleep 1

mount -t rootfs -o remount -rw rootfs /

mkdir /swap_zram0

sleep 1

mount -t rootfs -o remount -r rootfs /

mount -t ext2 -o rw /dev/block/zram0 /swap_zram0

这样的话,我们就有了一个交换分区来使用了,但发现使用free -m命令查看时,SWAP分区一直没有使用,并且一直有lowmemorykiller的操作,后来发现是我们的/sys/module/lowmemorykiller/parameters/minfree参数还是1GB DDR的配置,故而将其按一定比例调小后就可以了。

对于/sys/module/lowmemorykiller/parameters/minfree,其6个值与/sys/module/lowmemorykiller/parameters/adj一一对应,而adj这个与每个进程的/proc/X/oom_adj有关系,其中oom_adj的值越小表示越重要,越不可能被杀掉,而adj对应的6组参数在Android源码的frameworks/base/services/java/com/android/server/am/ProcessList.java有其对应值,我们的平台为0,117,235,352,529,1000,相应的minfree在1GB时设置为2048,6144,7168,22528,25600,26624,在512MB时设置为2048,6144,7168,10240,15360,20480。在这里会根据每个进程的oom_adj的值去判断是属于adj的哪个范围,当内存小于minfree对就的值,就去杀掉adj对应范围内的oom_adj所对应的进程。

如果SWAP分区不使用,我们还可以调整/proc/sys/vm/swappiness对应值,提升磁盘数据置换到SWAP的可能性,默认为60。

如果不想APK对应的进程大容易被KILL掉,可以在AndroidManifest.xml里面加上android:persistent="true"配置。

相关文章

  • Android系统在小内存下的使用

    最近在调试的方案,硬件配置是512MB的DDR,这在Android4.4这号称优化很大的系统版本上运行还是很吃力,...

  • Android结构介绍

    1. 操作系统层(OS)——最底层 因为Android源于Linux,使用了Linux内 核,所以Android使...

  • 如何使用Android WakeLock?

    在Android应用或者Framworks里面,要如何使用Android WakeLock来避免系统待机,或者系统...

  • 下载Android源码

    在Linux系统下载android源码(以下载android5.0源码为例) 在Linux系统中,通常使用Ubun...

  • Android.bp入门教程

    Soong 编译系统 在 Android 7.0 发布之前,Android 仅使用 GNU Make[https:...

  • Android: Manifest merger failed

    问题 :在Android7.0系统使用Intent跳转到APK安装时候遇到的错误 了解:Android7.0 系统...

  • Android 中使用系统签名的方法

    Android 中使用系统签名的方法 Android Build中系统签名使用方法 Key的目录 默认加密key是...

  • 知识梳理 - "博"采众长

    Android 使用&原理&源码分析 系统启动流程 Android源码研究——Android系统启动 Binder...

  • 测试之monkey

    简述: Monkey起源: Monkey程序由Android系统自带,使用Java语言写成,在Android文件系...

  • Android系统介绍及架构概览

    Android 系统介绍 Android 是Google在2008年12月23日发布的移动操作系统,主要使用在手机...

网友评论

    本文标题:Android系统在小内存下的使用

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