博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Out of memory: Kill process 解决
阅读量:6903 次
发布时间:2019-06-27

本文共 1115 字,大约阅读时间需要 3 分钟。

Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。

在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息:

Out of Memory: Killed process [PID] [process name].
该问题是low memory耗尽,因为内核使用low memory来跟踪所有的内存分配。
当low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。

上google研究了一下, 找到了一些配置方法。记录一下,备忘。

sysctl vm.panic_on_oom=1sysctl kernel.panic=Xecho “vm.panic_on_oom=1” >> /etc/sysctl.confecho “kernel.panic=X” >> /etc/sysctl.conf

上面配置可以让linux在出现 Out of memory之后重启。

echo -15 > /proc/[pid]/oom_adj

这会让 oom 在出现 Out of memory后,尽量不去kill这个进程。

echo 10 > /proc/[pid]/oom_adjoom

会优先考虑kill这个进程。

echo -17 > /proc/[pid]/oom_adj

oom在Out of memory时, 不会kill该进程。

oom_adj的值在-16 到 +15之间,值越高被kill的优先度越高,当该值为-17时,系统将不会杀死指定pid的进程,而-16~15则会使得进程的/proc/[pid]/oom_adj值呈指数(K*2^n)形式递增,即它们被杀掉的可能性呈指数递增。针对init(进程号为1)这个进程,无论该值设为多少都不会被杀。

sysctl vm.overcommit_memory=2echo “vm.overcommit_memory=2” >> /etc/sysctl.conf

可以完全关掉oom, 不过这并不建议,关掉后可能会出现未知的情况。

本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/2066747如需转载请自行联系原作者

qianghong000

你可能感兴趣的文章
iCheck的全选和获取value
查看>>
【连接查询】mySql多表连接查询与union与union all用法
查看>>
带你从零学ReactNative开发跨平台App开发[react native SqlLite 终极运用](十二)
查看>>
求二进制数中1的个数
查看>>
【Spark】提交Spark任务-ClassNotFoundException-错误处理
查看>>
原来你是这样的JAVA[03]-继承、多态、抽象类
查看>>
近年Recsys论文
查看>>
Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。...
查看>>
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 120: illegal multibyte sequence
查看>>
django 笔记
查看>>
Mac下多版本JDK安装
查看>>
记录一则RMAN恢复到历史备份(多个incarnation)
查看>>
『OpenCV3』Mat简介
查看>>
css3-11 如何设置文字的阴影
查看>>
【转】缓存几个重要概念
查看>>
【转】聊聊网络游戏同步那点事
查看>>
Qt之QDomDocument操作xml文件-模拟ini文件存储
查看>>
oracle的中文排序问题
查看>>
Announcing Zuul: Edge Service in the Cloud--转
查看>>
分享Kali Linux 2017年第17周镜像文件
查看>>