Linux内核OOM机制的详细分析_get_mm_counter-程序员宅基地

技术标签: Linux内核  内核  Linux服务器开发  后端开发  驱动开发  

Linux内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于每个进程的,内核直接回收利用的话比较麻烦,所以内核采用一种过度分配内存(over-commit memory)的办法来间接利用这部分“空闲”的内存,提高整体内存的使用效率。一般来说这样做没有问题,但当大多数应用程序都消耗完自己的内存的时候麻烦就来了,因为这些应用程序的内存需求加起来超出了物理内存(包括swap)的容量,内核(OOM killer)必须杀掉一些进程才能腾出空间保障系统正常运行。用银行的例子来讲可能更容易懂一些,部分人取钱的时候银行不怕,银行有足够的存款应付,当全国人民(或者绝大多数)都取钱而且每个人都想把自己钱取完的时候银行的麻烦就来了,银行实际上是没有这么多钱给大家取的。

比如某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被OOM killer杀掉了。重启机器后查看系统日志/var/log/messages会发现Out of Memory:Killprocess 1865(sshd)类似的错误信息。又比如有时VPS的MySQL总是无缘无故挂掉,或者VPS 经常死机,登陆到终端发现都是常见的 Out of memory 问题。这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这时会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。如果检查相关的日志文件(/var/log/messages)就会看到下面类似的Out of memory:Kill process 信息:

...

Out of memory: Kill process 9682(mysqld) score 9 or sacrifice child

Killed process 9682, UID 27,(mysqld) total-vm:47388kB, anon-rss:3744kB, file-rss:80kB

httpd invoked oom-killer:gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

httpd cpuset=/ mems_allowed=0

Pid: 8911, comm: httpd Not tainted2.6.32-279.1.1.el6.i686 #1

...

21556 total pagecache pages

21049 pages in swap cache

Swap cache stats: add 12819103,delete 12798054, find 3188096/4634617

Free swap = 0kB

Total swap = 524280kB

131071 pages RAM

0 pages HighMem

3673 pages reserved

67960 pages shared

124940 pages non-shared

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

内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码 linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory()被触发,然后调用 select_bad_process() 选择一个“bad”进程杀掉,判断和选择一个“bad”进程的过程由 oom_badness()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Linuxhus/article/details/113942489

智能推荐

摄像机内参与OpenGL_摄像机四个内参-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏14次。参考转自:https://blog.csdn.net/yanglusheng/article/details/52268234https://blog.csdn.net/sunboyiris/article/details/780826991、 相机参数是三种不同的参数。相机的内参数是六个分别为:1/dx、1/dy、r、u0、v0、f。opencv1里的说内参数是4个其为fx、..._摄像机四个内参

ActionView使用-程序员宅基地

文章浏览阅读1.5k次。效果图:Gradle:repositories { mavenCentral()}dependencies { compile 'com.github.markushi:android-ui:1.2'}xml文件:at.markushi.ui.ActionView android:id="@+id/action" _actionview

Vue子组件怎么调用父组件的方法 Vue子组件调用父组件函数的三种方法-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏10次。Vue子组件怎么调用父组件的方法 Vue子组件调用父组件函数的三种方法_子组件调用父组件函数

matlab上面将图片转换乘视频和视频转换为图片_matlab中怎么讲导出的连续图片变成视频-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏5次。1.视频转图片mov = VideoReader('D:\study\研二\课题相关\视频集\7.avi')framenum = mov.Duration*mov.FrameRate;for i=1:framenum frame = mov.readFrame(); %img = frame str = strcat('D:\study\研二\课题相关\视频集\..._matlab中怎么讲导出的连续图片变成视频

未来之星破解版计算机二级,又获奖了,他们是计算机界的未来之星!-程序员宅基地

文章浏览阅读281次。原标题:又获奖了,他们是计算机界的未来之星!2020年USACO(美国奥林匹克计算机竞赛)和ACSL(美国计算机科学联赛)成绩揭晓,我校参赛学生成绩突出,喜讯连连。USACO(United States of America Computing Olympiad, 美国计算机奥林匹克竞赛)和ACSL(American Computer Science League,美国计算机科学联赛)都是全球影响...

postgresql 远程数据库访问_pqsql数据库远程管理采用的算法-程序员宅基地

文章浏览阅读331次。问题场景:在 windows 上已经安装了 Postgresql , 需要使用 Windows 上面的 PgAdmin GUI 访问在 Linux 上面的 Postgresql 服务器。主要参考这篇文章https://www.netiq.com/documentation/identity-manager-47/setup_windows/data/connecting-to-a-remote-postgresql-database.html1. Linux Postgresql 数据源服._pqsql数据库远程管理采用的算法

随便推点

基于keras采用LSTM实现多标签文本分类(一)_keras lstm多分类-程序员宅基地

文章浏览阅读2.5k次。1.多标签即一条语句可能有多个类别划分。例如,这个酸菜鱼又酸又辣。属于酸和辣两个标签。在采用神经网络学习时,最后一层的激活函数应采用sigmoid激活函数,相当于对这条语句做了多个二分类。2.多分类即每条语句只有一个标签,在采用神经网络学习时,最后一层的激活函数应采用softmax激活函数,最后选取类别中的最大值作为预测结果。关于sigmoid和softmax 的区别此处再说明。本次数据集的格式为:关于LSTM的学习可以参考这篇。关于词向量化的方式,本文采用keras 内置Tokenizer A_keras lstm多分类

常用抓包工具分析_包分析工具-程序员宅基地

文章浏览阅读2.5w次,点赞3次,收藏38次。常用的抓包工具有: tcpdump (linux) wireshark (windows) tcpflow (linux) httpwatch (windows) 浏览器自带抓包工具 (windows)tcpdump (linux)tcpdump是linux下的抓包工具,一般使用比较习惯于,在linux下用tcpdump抓包,结果存入文件,把文件导入windows下用window..._包分析工具

linux-ubuntu下pycharm下载安装教程(社区版)_ubuntu安装pycharm-程序员宅基地

文章浏览阅读3.5w次,点赞9次,收藏81次。首先,配置JDK环境。 配置语句:sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-installer可以用命令java -version或者javac -version来看你的环境有没有配置完成 官网下载地址:https://ww..._ubuntu安装pycharm

VB 学习整理3 输入和输出_vb输入输出作业-程序员宅基地

文章浏览阅读793次。1.数值,字符串的转化Val(str) Str(num)2.object命名规则:字母开头,后跟字母、数字、下换线(可用中文);不使用保留字;不超过40字元;注释和驼峰法。3.change事件4.弹窗InputBox(提示讯息[,[标题][,[预设值][,Xpos,Ypos]]])5.MsgBox(讯息[,[格式码][,标题]]) '有返回值,是函数MsgBox _vb输入输出作业

VBA,窗体和控件的动态效果之一:scrollbar如何实现自动效果_vba scrollbar控件怎么用-程序员宅基地

文章浏览阅读3.3k次。之前只学习了窗体的静态效果 现在考虑 窗体和控件的动态效果srcollbar如何实现自动效果Sub Macro2()'' Macro2 Macro' 宏由 MC SYSTEM 录制,时间: 2012-2-4'' Selection.Verb Verb:=xlPrimary ActiveSheet.ScrollBars.Add(198, 118..._vba scrollbar控件怎么用

菜鸟自学Linux 命令 学习笔记(一)_linux gzh-程序员宅基地

文章浏览阅读129次。1.常用Linux指令shutdown (-rh now): 简单的关机指令,虽然菜鸟们长按关机键强制关机,显示屏也黑了,最终强制关机前丢失一些未保存的数据也不是没有可能的,结果不安全有隐患。于是我的习惯改变,打开控制台(我使用的系统是Linux Mint 核心是Linux 18.2,Window的小伙伴们请注意啊!),输入 shutdown -h now 现在关闭计算机来,那么这个指令会帮助控制台关闭所有正在运行的后台程序,并且持久化数据。其中的参数 -h是关机指令 另一个-r是重启指令 now是时_linux gzh

推荐文章

热门文章

相关标签