206
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
阿里云服务器ECS实例宕机并产生日志“Out of memory and no killable processes”怎么解决?

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>

4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 

5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>>   


点击这里点击这里进入阿里云ECS官方页面,立即免费体验云服务器ECS>>>

实例宕机并产生日志“Out of memory and no killable processes”

  • 问题描述

    Linux操作系统的ECS实例在运行过程中宕机,产生了“Out of memory and no killable processes”日志,调用栈类似如下:

     
    [28663.625353] [ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name
    [28663.625363] [ 1799]     0  1799    26512      245      56       3        0         -1000 sshd
    [28663.625367] [29219]     0 29219    10832      126      26       3        0         -1000 systemd-udevd
    [28663.625375] Kernel panic - not syncing: Out of memory and no killable processes...
    [28663.634374] CPU: 1 PID: 3578 Comm: kworker/u176:4 Tainted: G           OE   3.10.0-1062.9.1.el7.x86_64 #1
    [28663.676873] Call Trace:
    [28663.679312]  [<ffffffff8139f342>] dump_stack+0x63/0x81
    [28663.684421]  [<ffffffff811b2245>] panic+0xf8/0x244
    [28663.689184]  [<ffffffff811b98db>] out_of_memory+0x2eb/0x550
    [28663.694726]  [<ffffffff811be254>] __alloc_pages_may_oom+0x114/0x1c0
    [28663.700959]  [<ffffffff811bedb3>] __alloc_pages_slowpath+0x7d3/0xa40
    [28663.707279]  [<ffffffff811bf229>] __alloc_pages_nodemask+0x209/0x260
    [28663.713599]  [<ffffffff81216535>] alloc_pages_current+0x95/0x140
    [28663.719573]  [<ffffffff811ba5ee>] __get_free_pages+0xe/0x40
    [28663.725113]  [<ffffffff81075dae>] pgd_alloc+0x1e/0x160
    [28663.730225]  [<ffffffff810875e4>] mm_init+0x184/0x240
    [28663.735249]  [<ffffffff81088102>] mm_alloc+0x52/0x60
    [28663.740186]  [<ffffffff81257640>] do_execveat_common.isra.37+0x250/0x780
    [28663.759839]  [<ffffffff81257b9c>] do_execve+0x2c/0x30
    [28663.764864]  [<ffffffff810a231b>] call_usermodehelper_exec_async+0xfb/0x150
    [28663.777246]  [<ffffffff81741dd9>] ret_from_fork+0x39/0x50
  • 问题原因

    操作系统内核分配内存失败后,尝试通过kill进程来释放内存,但系统没有可被kill的进程,进而触发了系统的主动宕机。出现该问题的可能原因有:

    • 系统内核存在内存泄露,从而导致系统可用内存不足。

    • oom_score_adj-1000的进程占用过多内存,该类进程无法被终止从而导致系统可用内存不足。

      说明

      oom_score_adj是一个用于调整OOM(Out of Memory)终止进程的优先级的参数。内核根据每个进程的OOM分数(oom_score)来选择要终止的进程,较低的oom_score值表示进程更有可能被终止,而较高的值表示进程更不可能被终止。

  • 解决方案

    1. 检查系统内核是否存在内存泄露。

      具体操作,请参见如何排查slab_unreclaimable内存占用高的原因?。

    2. 检查进程的oom_score_adj设置是否合理。

      1. 执行以下命令,获取进程的PID。您可以使用命令如 pstop 或 pgrep 来查找进程的 PID。

         
        ps aux | grep <进程名称>

        您需要将 <进程名称> 替换为您要查找的进程的名称。

      2. 执行以下命令,检查 oom_score_adj 设置。

         
        cat /proc/<PID>/oom_score_adj

        您需要将 <PID> 替换为已获取的进程实际PID。

        根据您的环境和需求,可以根据oom_score_adj的值来评估进程的OOM行为是否合理。如果oom_score_adj的值为-1000,则表示该进程具有较高的优先级,更不可能被内核选择进行OOM终止,从而导致系统可用内存不足。


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!