开发者社区> 问答> 正文

Linux系统中,如何避免程序使用内存过多被kill掉

Linux系统中,如何避免程序使用内存过多被kill掉

展开
收起
道月芬1 2021-10-31 20:03:16 1668 0
2 条回答
写回答
取消 提交回答
  • 可以通过cgroup限制进程对资源的使用,docker就是通过cgroup实现的

    2021-11-03 12:15:08
    赞同 展开评论 打赏
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,

    OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,
    在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc//oom_score最大者并将之kill掉
    
    为了保护重要进程不被oom-killer掉,我们可以:echo -17 > /proc//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
    
    2021-10-31 23:15:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux 立即下载
深入解析数据存储技术原理及发展演进—Linux开源存储技术 立即下载
Debian GNU/Linux 安全合规之路 立即下载