【chromium】 Chromium OS的oom机制
前一段时间,运行在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:
取值0:启发式策略,比较多的内存申请可能会被拒绝,如当前内存2G,突然申请1T的内存(一般当系统启动selinux模块时有效,其他情况等同取值1);
取值1:允许分配比当前内存资源多的内存;
取值2:系统所能分配的内存资源不能超过swap+内存资源*系数(/proc/sys/vm/overcommit_ratio,默认50%,可调整)。如果资源已经用光,再有内存申请请求时,都会返回错误。
chromium os测试环境的值取值为1,这意味着,你可以当前可用内存为2G,你可以申请比2G更多的内存。
【chromium】 Chromium OS的oom机制的更多相关文章
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrom ...
- 理解WebKit和Chromium: Chromium的多进程资源加载机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ##概述 前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移 ...
- 理解WebKit和Chromium: Chromium网络栈
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 前面讲到Chromium的资源加载机制,在调用栈上,提到URLRequest之后就戛然而止,在这之下就是 ...
- Linux内核OOM机制的详细分析(转)
Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...
- Linux内核OOM机制的详细分析
Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉.典型的 ...
- OOM-killer 线上设置 +vm +OOM机制
http://blog.csdn.net/tenfyguo/article/details/9409743 http://blog.csdn.net/tenfyguo/article/details/ ...
- Linux下禁止使用swap及防止OOM机制导致进程被kill掉
首先解释两个概念: swap:在linux里面,当物理内存不够用了,而又有新的程序请求分配内存,那么linux就会选择将其他程序暂时不用的数据交换到物理磁盘上(swap out),等程序要用的时候再读 ...
- Linux内核OOM机制的理解【转】
本文转载自:http://blog.csdn.net/zhoutimo/article/details/52024487 What(什么是OOM): Linux下面有个特性叫OOM killer(Ou ...
- Linux内核OOM机制的详细分析【转】
本文转载自:http://blog.csdn.net/liukuan73/article/details/43238623 Linux内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没 ...
随机推荐
- doucment的获取节点的信息
document.activeElement 返回当前获取焦点元素 document.addEventListener() 向文档添加句柄 document.adoptNode(node) 从另外一个 ...
- 【转载】Gradle学习 第十一章:使用Gradle命令行
转载地址:http://ask.android-studio.org/?/article/94 This chapter introduces the basics of the Gradle com ...
- SELECT语句基础
列的查询 语法1-1 基本的SELECT语句 SELECT <列名>,... FROM <表名>; 语法1-2 查询出表中所有的列 SELECT * FROM <表名& ...
- mysql5.7兼容老版本不校验日期等字段
升级mysql5.7时,字段校验出现2个问题,一是不识别日期字段的 0000-00-00 00:00:00,二是有些非空且无默认值的字段,插入时必须指定具体的值. 修改/etc/my.cnf 可在[m ...
- 03-C#笔记-数据类型
--- # 1 数据类型 --- ## 1 和C++不同的数据类型: byte: 8位,0~255 decimal:范围大于double,128位 sbyte: 8位,-128~127 uint 32 ...
- Pycharm过期了怎么办?
Pycharn过期了,打开Pycharm,选择help,倒数第三个register,用激活码进行激活,具体情况见激活码,侵删
- ReactiveX 学习笔记(29)使用 RxCpp(RxQt)+ Qt 进行 GUI 编程
课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 下载 ...
- Educational Codeforces Round 78 (Rated for Div. 2) B - A and B(思维)
- MySQL 五大引擎之间的区别和优劣之分
MySQL五大引擎介绍: MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB) ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方 ...
- win +R
一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...