drivers/staging/android/lowmemorykiller.c

lowmemorykiller 在系统空闲内存不足时, 根据一定机制选择某个进程, 然后杀死它.

1. register_shrinker(&lowmem_shrinker); 向 shrinker 注册一个回调. 当内核线程尝试回收系统内存页时, 会逐个回调已注册的 shrinker. 调用时机涉及到内存管理一块, 暂不关心.

2. 有两个数组: int lowmem_adj[6] 和 int lowmem_minfree[6] .

lowmem_adj[6] 存储 oom_score_adj阀值.

lowmem_minfree[6] 存储 剩余空闲内存的阀值.

数组序号表示等级, 这两个数组中各等级值一一对应. 两个数组值都在 /sys/ 下导出了相应读写节点, 改写其中的值可以调整 lowmemkiller 的行为.

/sys/module/lowmemorykiller/parameters/adj

/sys/module/lowmemorykiller/parameters/minfree

注意一点, 向 /sys/module/lowmemorykiller/parameters/adj 文件写入时, 会调用 lowmem_autodetect_oom_adj_values() 把 oom_adj 值转化成 oom_score_adj 值, 存放到 lowmem_adj[6] 中.

task_struct -> signal_struct 中有 oom_adj, oom_score_adj, oom_score_adj_min 几个和 oom 相关的记录.

3. lowmem_shrinker() 被调用时, 才开始了真正的行为. 其中依次做了几件事:

1). 取得系统剩余内存放到 other_free, other_file 中. 然后再与 lowmem_minfree[] 数组中各等级比较, 如果lowmem_minfree[i] 刚好大于 other_free 和 other_file , 则 min_score_adj = lowmem_adj[i] 为此次遍历的最低 score.

2). 遍历所有进程, 把进程的 p->singal->oom_score_adj 与 min_score_adj 比较, 如果进程的 oom_score_adj < minscore_adj, 则此进程不满足条件, 不会被杀死. 继续处理下一个进程.

如果进程的 oom_score_adj >= min_score_adj, 还要取进程占用的内存大小 get_mm_rss(). 对于oom_score_adj 满足条件且 score 相同的两个进程, 取占用内存大的放入 selected 中.

3). 最后, 一次遍历选出一个进程 selected . 向该进程发送 SIGKILL 信号, 并且告诉进程是由于内存原因(TIF_MEMDIE)而杀死它.

init.rc 中有相关操作:

write /proc/1/oom_adj -16

令 init 的 oom_adj 为-16, 则其永远不会被 lowmemkiller 杀死.

最新文章

  1. svn检出的时候报 Unable to connect to a repository at URL错误(摘自CSDN)
  2. null和undefined的一些区别
  3. JS中两个感叹号!!的意义
  4. iOS中的两种主要架构及其优缺点浅析
  5. node.js整理 07例子
  6. hashmap理解总结
  7. 基于Heritrix的特定主题的网络爬虫配置与实现
  8. 实例:使用纹理对象创建Sprite对象
  9. linux进程的地址空间,核心栈,用户栈,内核线程
  10. &quot;xxxx&quot;.zip:这个压缩文件格式未知或者数据已经被损坏,打不开压缩文件,总出现这个提示的解决方法
  11. 解决MySQL中文乱码的问题
  12. Mac上小巧实用的GIF格式录屏软件 LICEcap
  13. Python自动化开发(三):循环次数控制、常用数据类型、字符串格式化、列表常用操作、列表的后续操作
  14. [置顶] xamarin Tablayout+Viewpager+Fragment顶部导航栏
  15. 常用YUV转RGB代码
  16. 分布式缓存技术之Redis_03分布式redis
  17. Bugku-CTF之网站被黑(这个题没技术含量但是实战中经常遇到)
  18. JavaScript三种判断语句和三元运算符
  19. Hadoop开发第6期---HDFS的shell操作
  20. 微信小程序------导航栏样式、tabBar导航栏

热门文章

  1. 字典(trie)树--从入门到入土
  2. 智能指针unqiue_ptr
  3. mysql单实例多库与多实例单库
  4. zabbix 3.4安装
  5. 单点登录-CAS
  6. MySQL之federated
  7. PS学习笔记(02)
  8. Fiddler抓包工具手机添加代理后连不上网
  9. Git上传的使用步骤
  10. 【贪心+二分】codeforces C. Sagheer and Nubian Market