前一段时间,运行在Chromium OS上的一个相机应用经常会自己崩溃,进程戛然而止,测试过程中发现使用的内存以肉眼可见的内存增长,当增长到1G左右,应用窗口突然消失,虽然原因不明,但是能猜到个大概,和内存的增长是有关系的。虽然应用所在的renderer进程是browser的子进程,但是并没有相关日志可查,如果是因为内存增长导致进程被杀,应该从系统层分析,查了位于/var/log/memory的日志,发现确实有kill进程的迹象,原因是oom,那么什么是oom?满足什么条件的进程才会被杀呢?有先杀后杀的顺序么,如果没有,会不会因为应用的内存增长错杀别的进程?

进程击杀顺序

首先要清楚的一个概念:浏览器确实干涉了它和它的子进程的oom策略

浏览器一开始只有一个browser进程,而renderer进程是由Zygote进程fork出来的,并且在进行进程初始化的流程中(这个进程初始化是一个统一的流程,每个进程都会走,详情可以看另一篇文章GPU进程启动流程分析)对初始的oom score做了设定,但是oom机制使用的是linux内核本身的oom机制。

看下oom score,oom score的值越小,越有可能最晚被击杀,产生renderer进程的Zygote进程和Browser进程也是可以被杀掉的,但是优先级排在最后。

renderer进程初始化时oom score是300。最大的分数值为1000,意思是当进程的oom score达到1000时,该进程可能会在很短的时间内被优先击杀。

linux内核设定的oom score的范围并没有刚才描述的这么大,它值是-15到15的一个区间,和刚才提到的-1000到1000类似。这个值是相互转换的按比例进行换算。比如200 = 3。

最终OOM-Killer是通过/proc//oom_score这个值来决定哪个进程被杀死。这个值是系统综合进程的内存消耗量、CPU时间(utime+stime)、存活时间(utime - start_time)和oom_adj计算出的,消耗内存越多oom_score值越高,存活时间越长值越低。另外,Linux在计算进程的内存消耗的时候,会将子进程所耗内存的一半算到父进程中(有兴趣的话可以查看内核代码mm/oom_kill.c:badness函数)。

Linux下有3种Overcommit策略,可以通过/proc/sys/vm/overcommit_memory配置,取0、1和2三个值,默认是0:

  1. 取值0:启发式策略,比较多的内存申请可能会被拒绝,如当前内存2G,突然申请1T的内存(一般当系统启动selinux模块时有效,其他情况等同取值1);

  2. 取值1:允许分配比当前内存资源多的内存;

  3. 取值2:系统所能分配的内存资源不能超过swap+内存资源*系数(/proc/sys/vm/overcommit_ratio,默认50%,可调整)。如果资源已经用光,再有内存申请请求时,都会返回错误。

chromium os测试环境的值取值为1,这意味着,你可以当前可用内存为2G,你可以申请比2G更多的内存。

转载于:https://www.cnblogs.com/lenomirei/p/11305127.html

【chromium】 Chromium OS的oom机制相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  2. 操作系统复习--OS的运行机制和体系结构

    操作系统复习–OS的运行机制和体系结构 本文章按照王道操作系统参考 文章主要分:运行机制,操作系统内核,操作系统的体系结构 运行机制 两种命令 特权指令:不允许用户直接使用的命令,如:I/O,中断命令 ...

  3. inputstreamreader未关闭会导致oom_Linux内核OOM机制分析和防止进程被OOM杀死的方法...

    问题描述 Linux 内核有个机制叫 OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程 ...

  4. Linux内核OOM机制的详细分析

    Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉.典型的 ...

  5. Linux内核OOM机制的详细分析【转】

    本文转载自:http://blog.csdn.net/liukuan73/article/details/43238623 Linux内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没 ...

  6. Linux OOM机制详解

    Linux OOM机制说明 在工作过程中,你可能会遇到过这种情况,程序在运行一段时间之后突然挂掉,在你保证程序在正常情况下不会挂掉的情况下,程序挂掉的原因可能是在你的程序运行过程中,有一段时间你的程序 ...

  7. Linux内存管理(四十六):内核OOM机制详解

    源码基于:Linux5.4 0. 前言 在 buddy系统慢速分配 一文中,我们分析了从快速分配流程无法分配到内存之后,会进入慢速分配流程.通过多种方式尝试内存分配: 通过降低水位等方式修改 allo ...

  8. Linux内核OOM机制的详细分析和防止进程被OOM杀死的方法

    转载自:http://blog.chinaunix.net/uid-29242873-id-3942763.html Linux 内核有个机制叫OOM killer(Out-Of-Memory kil ...

  9. Chromium插件(Plugin)机制简要介绍和学习计划

    在Chromium中,除了可以使用Extension增强浏览器功能,还可以使用Plugin.两者最大区别是前者用JS开发,后者用C/C++开发.这意味着Plugin以Native Code运行,在性能 ...

最新文章

  1. RDKit | 基于RDKit的氨基酸序列转换为SMILES
  2. 「Web2.0」的创造者表示:为Web3.0喝彩还为时尚早
  3. Android Service和Binder、AIDL
  4. petshop4.0 详解之三(PetShop数据访问层之消息处理)
  5. java rsa 验_Java使用RSA加密解密签名及校验
  6. JS-鼠标-键盘-文档-表单事件
  7. python之路_前端基础之jQuery入门2
  8. Javascript (history,location)对象
  9. 5.13 综合案例2.0-火焰检测系统(2.2版本接口有更新)
  10. fences卸载_图文帮您win10系统卸载fences的设置技巧
  11. 大数据是什么?多大的数据叫大数据?
  12. scala练习——fold函数
  13. C++加载lib和dll的方法
  14. 【shell】How can I create a select menu in a shell script?
  15. 秋天,小溪潺潺,古老的树上黄叶灿灿,阳光像一个魔法师,在树叶间流动,远山,云天,充满秋阳的光线。以此景观做一首诗...
  16. Python3+Scrapy通过代理爬取携程酒店数据
  17. 王雪松等:驾驶行为与驾驶风险国际研究进展
  18. eclipse -javaEE 和jdk版本对应
  19. UnRaid虚拟机安装Uos家庭版并由Windows远程桌面访问的成功流程
  20. 在线运行python的网站-Python在线练习运行平台

热门文章

  1. python数据处理常用函数_Python常用数据处理函数
  2. IntelliJ IDEA for Mac如何查看某个方法的实现
  3. Linux 进程状态介绍
  4. macOS下的视频格式转换器
  5. rust的权限柜怎么做_潍坊装修知识~二胎家庭不做上下铺,把两张床靠墙放,中间做收纳柜,你感觉怎么样?...
  6. python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践
  7. c语言编程数学黑洞,一个数学黑洞——6174
  8. java用户名检查数据库_登入界面账号密码是访问数据库,但登入问题时if判断时就是执行不了...
  9. mysql mgr bug_Mysql MGR架构误操作引发的问题处理
  10. rust废铁最快_Rust初体验,它确实有点快