博客
关于我
Linux OOM-killer 内存不足时kill高内存进程的策略
阅读量:788 次
发布时间:2023-02-01

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

Linux 系统在内存不足时会自动启动OOM killer(出内存杀手)的机制,用来防止系统因内存不足而崩溃。这一机制通过监控内存占用的进程,选择一个“最坏的”进程然后将其终止,从而保障系统的稳定运行。

OOM killer 的工作原理

在 Linux 核心中,OOM killer 的主要工作流程可以概括为以下几个步骤:

  • 检测内存不足:当系统内存使用率接近或达到片_slices的负载时,内核会启动OOM killer。

  • 挑选”最坏进程“:内核会通过调用 select_bad_process() 函数,挑选需要结束的进程。该函数的核心逻辑在于调用 oom_badness() 函数,通过计算每个进程的内存占用权重 oom_adj 来评估进程的”坏程度“。

  • 终止进程:一旦挑选出要终止的进程,内核会将该进程标记为最高优先级任务,并向 /proc/PID/sched.interval 写入 friezahead,以增加进程被立即终止的几率。

  • 通过日志查看OOM killer 的活动

    为了监控和分析OOM killer 的行为,可以通过以下方式检查相关日志:

  • 查看 /var/log/messages

    grep "Out of memory" /var/log/messages

    这一命令可以帮助你快速定位触发OOM killer的具体进程和错误信息。

  • 使用 dmesg 命令

    dmesg | grep -i "killed process"

    通过 dmesg 命令可以查看内核日志,了解OOM killer终止进程的详细信息。

  • 内核的OOM handling机制

    在 Linux 核心中,OOM killer 的行为由一系列函数和配置参数共同控制。最核心的函数位于 linux/mm/oom_kill.c文件中,其中包含了进程被终止前的各种准备工作和终止流程。

    ####idiaemicill如果你的系统正在频繁触发OOM killer,建议先检查是否有不必要的进程在运行,并考虑合理控制内核的内存分配策略。

    启用或禁用OOM killer

    通过 sysctl 参数可以对系统的内存管理策略进行配置:

  • 禁用OOM killer

    • 修改 /proc/\\/PID/oom_adj 文件,写入 -17
    • 或者临时禁用:
      echo -17 > /proc/1/oom_adjecho -17 > /proc/2/oom_adj
  • 永久禁用OOM killer

    • 修改 vm.panic_on_oom0
      sysctl -w vm.panic_on_oom=0
  • ** 恢复默认行为**:

    • Sheep herder:
      sysctl -p
  • 注意事项

    • ** Periodic 策略**:定期清理不必要的进程和文件,避免因ILITIES管理。

    • ** 优先级监控**:使用 tophtop 命令监控系统内存占用情况,同时留意新进程的内存需求。

    • ** 内存调配参数**:调整 /proc/sys/vm/overcommit_memory 根据系统需求设置,平衡内存使用和系统稳定性。

    • ** 应对策略**:对于中国常见的高负载请求环境,推荐设置过总内存为 1,以确保基本服务不受影响。

    通过以上方法和原则,可以有效降低系统因内存不足而触发OOM killer的风险,保障关键业务的稳定运行。

    转载地址:http://xjwfk.baihongyu.com/

    你可能感兴趣的文章
    Linux Bash 脚本中的 IFS 是什么?
    查看>>
    linux bash: sqlplus: command not found 错误处理
    查看>>
    linux bash中too many arguments问题的解决方法
    查看>>
    Linux BASH多进程并行处理的方法实现
    查看>>
    linux bg和fg命令
    查看>>
    Linux Bridge KVM虚拟化环境部署
    查看>>
    Linux Bridge(网桥)
    查看>>
    linux build编译,rpmbuild 编译
    查看>>
    linux C 中的volatile使用【转】
    查看>>
    linux c 正则
    查看>>
    Linux C/C++ 学习路线(已拿腾讯、百度 offer)
    查看>>
    Linux cat 命令的进化版:Bat 0.25 正式发布,行压缩功能亮点十足!
    查看>>
    linux centos tomcat8配置apr模式
    查看>>
    linux centos 安装 docker-compose 1.27.4
    查看>>
    linux centos6.4 php连接sql server2008
    查看>>
    Linux Centos7 xfsdump文件系统的备份和恢复
    查看>>
    Linux centos7 防火墙设置
    查看>>
    linux centos下 svn 版本控制服务器的搭建
    查看>>
    Linux CFSSL 生成证书
    查看>>
    linux chrom 系统无法读取用户偏好配置无需删除.config配置文件
    查看>>