Linux OOM-killer 内存不足时kill高内存进程的策略
2024-09-24 17:58:41
OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味
在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/<pid>/oom_score最大者并将之kill掉
为了保护重要进程不被oom-killer掉,我们可以:echo -17 > /proc/<pid>/oom_adj,-17表示禁用OOM
我们也可以对把整个系统的OOM给禁用掉:
sysctl -w vm.panic_on_oom=1 (默认为0,表示开启)
sysctl -p
值得注意的是,有些时候 free -m 时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址
平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连
可用 top M 查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer
参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许(默认)
当overcommit_memory=1 永远允许进程overcommit
当overcommit_memory=2 永远禁止overcommit
基本概念:
Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process()选择一个”bad”进程杀掉。如何判断和选择一个”bad进程呢?linux选择”bad”进程是通过调用oom_badness(),挑选的算法和想法都很简单很朴实:最bad的那个进程就是那个最占用内存的进程。
如何查看:
grep "Out of memory" /var/log/messages
查看系统日志方法:
运行egrep -i -r 'killed process' /var/log命令,结果如下:
也可运行dmesg命令,结果如下:
转载自:
https://www.cnblogs.com/duanxz/p/10185946.html
https://www.cnblogs.com/yanqingxu/p/8316359.html
最新文章
- SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块
- centos7 升级内核到最新版本
- Linux学习笔记2_mysql安装
- Handling events in an MVVM WPF application
- HTML速查列表
- SQL Server 数据导入Mysql详细教程
- es6小技巧
- js限制textarea文本框的文字个数
- Linux学习之tail命令
- The type MultipartEntity is deprecated
- 【android】优秀的UI资源站点集合
- 初识Jenkins
- 官网下载的Struts 2解压后缺少xwork-core.jar文件
- bzoj1195 神奇的ac自动机+状态压缩dp
- js五子棋游戏
- learning scala read from console
- 错误“AxImp.exe”已退出,代码为 -1163019603【转载及个人看法】
- Jquery执行效率提高的方法
- 嵌入web字体
- C#(Winform)的SaveFileDialog(文件保存对话框)控件使用
热门文章
- windows cmd下如何暂停(挂起)运行中的进程
- centos安装xen虚拟机并且配置bridge
- 024--python re、logging、configparser、hashlib模块
- Mac下的常用终端命令与vim常用命令
- Codeforces Round #357 (Div. 2)C. Heap Operations
- mysql关于时间函数的应用
- gvim 常用键
- AtCoder Grand Contest 016 E - Poor Turkeys
- Codeforces 669D Little Artem and Dance (胡搞 + 脑洞)
- [BZOJ3916/WOJ3815]Friends