挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
游戏交易就上寄售网-专注稳定-诚信赢天下玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)天下盾/国内/免实名/免备案CDN无视一切CC/DD攻击
→入驻S9企业发卡网各种全黑号辅助群:475351077 ██【我要租此广告位】██.
.. .
查看: 2284|回复: 6
打印 上一主题 下一主题

Linux如何使用OOM killer 机制?

[复制链接]

205

积分

66

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
139
海币
389
交易币
0
跳转到指定楼层
楼主
发表于 2015-8-11 16:47:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


本帖最后由 kkj2015 于 2015-8-11 16:49 编辑

在系统领域当中,许多学者们都不知道OOM killer 机制该怎样运用它,小编为你一一详解Linux学习的知识。OOM killer 机制就是Linux杀死进程的以个机制,如果进程损坏系统资源到底某种程度,OOM killer 机制就会强制杀死进程。下面来跟大家讲解Linux学习怎样运用OOM killer 机制。

简单来说该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。
  这个功能即使在无法释放内存的情况下,也能够重复进行确保内存的处理过程,防止系统停滞,还可以找出过度消耗内存的进程。

  典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障或者机器down掉,很大可能是sshd进程被 OOM killer杀掉了。
  重启机器后查看系统日志/var/log/messages会发现 Out of Memory: Kill process 247(sshd)类似的错误信息。
  还有另外一种情况也会导致能ping不能ssh,就是网络连接过多把系统文件描述符资源耗尽,这里暂时不考虑这种情况。
  而在使用vip的高可用方案中,这种情况也很容易出现脑裂的现象。
  防止重要的系统进程触发(OOM)机制而被杀死:可以设置参数/proc/PID/oom_adj为-17,可临时关闭linux内核的OOM机制。内核会通过特定的算法给每个进程计算一个分数来决定杀哪个进程,每个进程的oom分数可以/proc/PID/oom_score中找到。
  我们认为重要的进程有sshd,或者一些监控守护进程,大家可以根据自己实际情况选择需要保护的进程。

  保护某个进程不被内核杀掉可以这样操作:

  echo -17 》 /proc/$PID/oom_adj
  可以写一个简单的脚本,部署在crontab上防止重要进程被oom
  pgrep -f “/usr/sbin/sshd” | while read PID;do echo -17 》 /proc/$PID/oom_adj;done
  其中的“/usr/sbin/sshd”可以替换为你认为重要的进程,不过在匹配时候注意不要匹配错了
  1.进程的选定方法
  OOM Killer在内存耗尽时,会查看所有进程,并分别为每个进程计算分数。将信号发送给分数最高的进程。
  2.计算分数的方法

 OOM Killer计算分数

  1. 首先,计算分数时是以进程的虚拟内存大小为基准的,虚拟内存大小可以使用ps命令的VSZ或/proc/《PID》/status的 VmSize来确认。对于正在消耗虚拟内存的进程,其最初的得分较高,单位是将1KB作为1个得分,消耗1GB内存的进程,得分约为1024*1024。
  2.如果进程正在执行swapoff系统调用,则得分设置为最大值(unsigned long的最大值)。这是因为禁用swap的行为与消除内存不足是相反的,会立刻将其作为OOM Killer的对象进程。
  3.如果是母进程,则将所有子进程内存大小的一半作为分数。
  4. 根据进程的CPU使用时间和进程启动时间调整得分,这是因为在这里认为越是长时间运行或从事越多工作的进程越重要,需保持得分较低。
  5.对于通过nice命令等将优先级设置得较低的进程,要将得分翻倍。nice-n中设置为1~19的命令的得分翻倍。
  6.特权进程普遍较为重要,因此将其得分设置为1/4。
  7.通过capset(3)等设置了功能(capability)CAP_SYS_RAWIO注3的进程,其得分为1/4,将直接对硬件进行操作的进程判断为重要进程。
  8.关于Cgroup,如果进程只允许与促使OOM Killer运行的进程所允许的内存节点完全不同的内存节点,则其得分为1/8。
  9.最后通过proc文件系统oom_adj的值调整得分。
  依据以上规则,为所有进程打分,向得分最高的进程发送信号SIGKILL(到Linux 2.6.10为止,在设置了功能CAP_SYS_RAWIO的情况下,发送SIGTERM,在没有设置的情况下,发送SIGKILL)。
  各进程的得分可以使用/proc/《PID》/oom_score来确认。
  但是init(PID为1的)进程不能成为OOM Killer的对象。当成为对象的进程包含子进程时,先向其子进程发送信号。
  向成为对象的进程发送信号后,对于引用系统的全线程,即使线程组(TGID)不同,如果存在与对象进程共享相同内存空间的进程,则也向这些进程发送信号。
  至于为什么用-17而不用其他数值(默认值为0),这个是由linux内核定义的,查看内核源码可知:
  以linux- 3.3.6版本的kernel源码为例,路径为linux-3.6.6/include/linux/oom.h,阅读内核源码可知oom_adj的可调 值为15到-16,其中15最大-16最小,-17为禁止使用OOM。oom_score为2的n次方计算出来的,其中n就是进程的oom_adj值,所 以oom_score的分数越高就越会被内核优先杀掉。

  当然还可以通过修改内核参数禁止OOM机制

  # sysctl -w vm.panic_on_oom=1
  vm.panic_on_oom = 1 //1表示关闭,默认为0表示开启OOM
  # sysctl -p
  测试程序
  命令行参数输入占用内存大小N,根据自身实验环境的物理内存大小来设置,例如我的实验环境为内存4G,设为4G就足够了
  代码命名为mem.c,编译方法 gcc -o mem mem.c
  #include 《stdio.h》
  #include 《stdlib.h》
  #include 《string.h》
  #define PAGE_SZ (1《《12)
  int main(int argc, char* argv[]) {
  int i;
  if (argc != 2) return 0;
  int gb = atoi(argv[1]);
  for (i = 0; i 《 ((unsigned long)gb《《30)/PAGE_SZ ; ++i) {
  void *m = malloc(PAGE_SZ);
  if (!m)
  break;
  memset(m, 0, 1);
  }
  printf(“allocated %lu MB\\n”, ((unsigned long)i*PAGE_SZ)》》20);
  getchar();
  return 0;
  }
  然后执行 。/mem 4
  如果不执行任何操作的话,直接运行结果会发现系统自动oom掉这个进程
  如果我们进行以下操作,把进程优先级设置为-17
  pgrep -f “mem” | while read PID; do echo -17 》 /proc/$PID/oom_adj;done
  你会发现系统不会把这个占用大内存的进程oom掉,但这时你也会发现系统响应变慢甚至宕机!

  设置任意进程触发oom

  一个最简单的测试触发OOM的方法,可以把某个进程的oom_adj设置到15(最大值),最容易触发。然后执行以下命令:
  echo f 》 /proc/sysrq-trigger

  以上是linux学习的内容知识-Linux怎样运用OOM killer 机制操作过程,Linux强制杀死进程就不会出现死机或者中毒的现象,这也是Linux一大优势。了解更多LiLinux视频教程欢迎来课课家教育官方查询观看学习!

联系我时,请说是在 挂海论坛 上看到的,谢谢!

免费评分

参与人数 1海币 +1 收起 理由
wpe发烧友 + 1 感谢分享,很给力!~



上一篇:千元级别远程培训班第二期之Linux课堂视频教程
下一篇:Linux系统教程必学_Linux常用操作具体有哪些?
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:[email protected]),本站将立即改正。

11

积分

2

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
9
海币
0
交易币
0
沙发
发表于 2015-8-11 17:03:30 | 只看该作者
想不回复不行啊

11

积分

2

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
9
海币
0
交易币
0
板凳
发表于 2015-8-11 17:25:54 | 只看该作者
............
回复

使用道具 举报

205

积分

66

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
139
海币
389
交易币
0
地板
 楼主| 发表于 2015-8-21 10:11:56 | 只看该作者
只为成功找方法,不为失败找借口

1

积分

0

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
12
交易币
0
5#
发表于 2016-5-1 10:40:49 | 只看该作者
回复

使用道具 举报

1

积分

0

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
258
交易币
0
6#
发表于 2016-8-28 22:20:36 | 只看该作者
写的很好,刚好遇到一个被oom机制杀死进程的问题,增加了理解

1

积分

0

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
183
交易币
0
7#
发表于 2016-12-4 17:48:52 | 只看该作者
我也是, 进程是个问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2024-5-19 17:27 , Processed in 0.418504 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表