网站首页 美食营养 游戏数码 手工爱好 生活家居 健康养生 运动户外 职场理财 情感交际 母婴教育 生活知识 知识问答

Android系统在小内存下的使用

时间:2024-10-14 22:16:53

1、最近在调试的方案,硬件配置是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

2、接下来运行起来后(如上述编译失败,需要把SYSFS和BLOCK相关配置加上),可以看到有/dev/block/zram0 这一结点,然后我们的方案在init.rc里加了一个service,其为oneshot类型,就是执行一个脚本了,脚本内容如下:#!/system/bin/shecho $((256*1024*1024)) > /sys/block/zram0/disksizemkswap /dev/block/zram0swapon /dev/block/zram0sleep 1mkfs.ext2 -b 4096 /dev/block/zram0sleep 1mount -t rootfs -o remount -rw rootfs /mkdir /swap_zram0sleep 1mount -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的配置,故而将其按一定比例调小后就可以了。

3、对于/sys/module/lowmemorykiller/parameters/minfree,其6个值与/sys/mo颊俄岿髭dule/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所对应的进程。

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

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

© 2026 阿力知识库
信息来自网络 所有数据仅供参考
有疑问请联系站长 site.kefu@gmail.com