判断RAM是否不足
物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。
系统优先使用物理内存2,如果
SWAP free 很小说明虚拟内存几乎耗尽
swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用物理内存;参数值越高就是反过来,使内核更多的去使用swap空间。Ubuntu系统swappiness默认值为60,表示的含义可以这样来理解,当剩余物理内存低于40%(40=100-60)时,开始使用swap分区。
130|G8142:/ $ cat /proc/sys/vm/swappiness
100
若是你观察Swap 中的使用量一直在增长,或Swap used 为一个很大的值。那咱们基本就能肯定在现有的情况下内存出现问题。

adb shell dmesg
[ 367.044922] lowmemorykiller: Killing 'le.smartcharger' (16156), adj 500,\x0a
to free 30152kB on behalf of 'kswapd0' (149)
because cache 127124kB is below limit 129024kB for oom_score_adj 300\x0a
Free memory is 64144kB above reserved.\x0a
Free CMA is 0kB\x0a
Total reserve is 67076kB\x0a
Total free pages is 71784kB\x0a
Total file cache is 266924kB\x0a
Total zcache is 0kB\x0a
GFP mask is 0x24000c0
为了kswapd0 kill le.smartcharger,释放内存
LowMemoryKiller是一种根据内存阈值级别触发的内存回收的机制,在系统可用内存较低时,就会选择性杀死进程的策略,相对OOMKiller,更加灵活。
LowMemoryKiller是一种根据内存阈值级别触发的内存回收的机制,在系统可用内存较低时,就会选择性杀死进程的策略,相对OOMKiller,更加灵活。
查看LowMemoryKiller阈值,留个数字代表六种进程的阈值(foreground(前台进程)、visible(可见进程)、secondary server(次要服务)、hidden(后台进程)、content provider(内容供应节点)、empty(空进程))
adb shell cat /sys/module/lowmemorykiller/parameters/minfree
18432,23040,27648,32256,80296,105640
以上数字是page,1 page =4k
72MB 90MB 108MB 216MB 315MB 412MB
查看进程adj值
G8142:/ # ps -A | grep home
u0_a73 17192 1334 2549212 186148 SyS_epoll_wait 78d5886e18 S com.sonymobile.home
G8142:/ # cat /proc/17192/oom_adj
0(前台应用)
cache 127124kB is below limit 129024kB for oom_score_adj
adj分级

adb shell dumpsys meminfo
Tot
Linux内存管理与优化:物理内存、虚拟内存与内存泄漏分析

最低0.47元/天 解锁文章
1003

被折叠的 条评论
为什么被折叠?



