OOM killer问题

来源:互联网 发布:免费的起名软件 编辑:程序博客网 时间:2024/05/22 09:28

 

问题描述

1什么是OOM Killer

OOM指在linux中指的是Out of Memory。当linux系统内存耗尽时(主要指申请了并且使用的内存,可理解为物理内存),linux内核会选取一个用户进程,将其kill掉,这个特性叫做OOM killer。

2哪些进程会被kill 

综合进程的内存消耗量、CPU时间、存活时间和/proc/$pid/oom_adj计算得出/proc/$pid/oom_score,得分高者被kill;内存占用高者易被kill,运行时间长者不易被kill,root用户开启的进程相对不容易被kill。原则是杀最少的进程释放最多的内存;

3是否有选项可以屏蔽该功能 

是。/proc/$pid/oom_adj设置为-17即表示该进程不会因OOM被kill掉(该变量的取值范围是-16~15,取值越大越容易被kill)。可能引起的副作用是linux系统重启。

 

解决方案

4确保软件无内存泄漏 

使用valgrind工具检测软件是否存在内存泄漏;

5接受软件自身业务处理能力范围内的请求

对于图片处理相关系统来说,在未处理的HTTP请求数达到一个限定值后,拒绝接受处理更多地请求,从请求处理响应时间(发起合成GIF请求到GIF合成通知业控)来看,会使用未处理的HTTP请求数目作为限制条件;

对流接入及其它非指令较多型的子系统来说;可考虑监测进程自身内存和系统内存(物理内存)来确定何时减少服务;因为linux内核允许超量分配,因此判断系统已使用内存达到90%以上时可以减少服务;

 

 


原创粉丝点击