lowmemory相关performance问题
(1)修改frameworks\base\services\core\java\com\android\server\am\ProcessList.java
static final int MAX_CACHED_APPS = 32; // 改为 static final int MAX_CACHED_APPS = 12;
(2)调整Low Memory Killer minifree门限值,frameworks\base\services\core\java\com\android\server\am\ProcessList.java中,
调整下面的mOomMinFreeHigh里面的后三项 ,分别增大1.1倍 1.2倍,1.5倍
// These are the high-end OOM level limits. This is appropriate for a
190 // 1280x800 or larger screen with around 1GB RAM. Values are in KB.
191 private final int[] mOomMinFreeHigh = new int[] {
192 73728, 92160, 110592,
193 129024, 147456, 184320
194 };
(3)ZRAM虽然省一些内存但是对performance也会有影响,1G的project建议开启,2G以上的项目可以考虑关闭。
ZRAM关闭方法:
修改:/device/mediatek/[project]/init.[project].rc
将
service enableswap /system/bin/sh /enableswap.sh
class core
oneshot
seclabel u:r:enableswap:s0
注释掉
#service enableswap /system/bin/sh /enableswap.sh
#oneshot
#seclabel u:r:enableswap:s0
(4)参考下面FAQ调整dirty_background_ratio、dirty_ratio,以往其他客户经验是减半:
FAQ13684 iowait问题成因及对策
可以在device/mediatek/mt6580/init.mt6580.rc增加是可以的,只要保证添加的位置能够执行到即可。
修改是否成功,可以在开机后进入adb shell,用下面命令查看:
root@android:/ # cat /proc/sys/vm/dirty_ratio
root@android:/ # cat /proc/sys/vm/dirty_background_ratio
(5)修改/frameworks/base/services/core/java/com/android/server/am/ProcessList.java中
long getCachedRestoreThresholdKb() {
return mCachedRestoreLevel; //将mCachedRestoreLevel 改为 mCachedRestoreLevel/2
}
这个修改目的,当 AMS 计算出系统 Memory 紧张时候,将超过这个 Size 的进程,ADJ>=9时, 就砍掉