安卓内存分析

Linux内存管理与优化:物理内存、虚拟内存与内存泄漏分析

判断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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值