首页 > 系统相关 >linux: Out-Of-Memory Killer 机制了解

linux: Out-Of-Memory Killer 机制了解

时间:2024-11-14 23:18:40浏览次数:3  
标签:linux OOM Killer oom score 内存 Memory 进程

在Linux操作系统中,内存管理是确保系统稳定性和性能的关键环节。当系统内存耗尽时,Linux内核会启动一种称为OOM Killer(Out-Of-Memory Killer)的机制,以选择并终止某些进程,释放内存资源,防止系统崩溃。
在这里插入图片描述

一、OOM Killer的背景

Linux内核采用了内存过度提交(Overcommit)的策略,即允许进程申请的内存总量超过实际物理内存容量。这是因为进程申请的内存并不一定立即使用,实际使用量通常小于申请量。然而,当多个进程同时开始实际使用其申请的内存时,可能导致内存耗尽。此时,内核无法满足新的内存分配请求,OOM Killer机制便会被触发。

二、OOM Killer的工作原理

当系统内存不足且无法通过其他手段(如回收缓存、交换空间等)释放足够内存时,内核会调用out_of_memory()函数,启动OOM Killer机制。该机制会遍历系统中的所有进程,根据每个进程的内存使用情况、优先级等因素计算一个分数(称为oom_score),选择分数最高的进程进行终止,以释放内存资源。

三、影响OOM Killer决策的因素

  1. 内存使用量:进程占用的物理内存越多,oom_score越高,被终止的可能性越大。

  2. 进程优先级:通过调整/proc/[PID]/oom_score_adj文件的值,可以影响进程的oom_score。该值范围为-1000到1000,值越高,进程被终止的可能性越大;值为-1000时,进程将被保护,不会被OOM Killer终止。

  3. 系统参数:内核参数/proc/sys/vm/overcommit_memory/proc/sys/vm/panic_on_oom等也会影响OOM Killer的行为。例如,overcommit_memory参数控制内存过度提交的策略,panic_on_oom参数决定在内存耗尽时系统是触发OOM Killer还是直接崩溃。

四、防止关键进程被OOM Killer终止的方法

为了防止关键进程(如sshd)被OOM Killer终止,可以采取以下措施:

  1. 调整oom_score_adj:将关键进程的oom_score_adj值设置为-1000,以确保其不被OOM Killer终止。

    echo -1000 > /proc/[PID]/oom_score_adj
    
  2. 优化内存使用:确保应用程序高效使用内存,避免内存泄漏,减少不必要的内存占用。

  3. 配置内存限制:使用cgroups等机制为进程设置内存限制,防止单个进程占用过多内存,影响系统整体稳定性。

五、总结

Linux的OOM Killer机制在系统内存耗尽时,通过选择性地终止进程,确保系统的持续运行。理解并合理配置OOM Killer相关参数,对于保障系统关键进程的稳定运行至关重要。同时,优化应用程序的内存使用,合理规划系统资源,也是防止OOM事件发生的重要手段。

标签:linux,OOM,Killer,oom,score,内存,Memory,进程
From: https://blog.csdn.net/qq_14829643/article/details/143783161

相关文章

  • 【linux日志】web日志分析
    WEB正确日志格式分析#日志统计举例[root@master~]#cat/etc/httpd/logs/access_log|awk'{print$1}'#对IP排序[root@master~]#cat/etc/httpd/logs/access_log|awk'{print$1}'|sort#打印每一个重复出现IP的次数,[root@master~]#cat/etc/httpd/logs/access_......
  • 【linux漏洞】环境搭建
    第一步:设置环境1.1安装所需工具在开始之前,确保你的Linux机器上安装了以下工具:GCC(GNU编译器集合):用于编译我们的易受攻击程序。GDB(GNU调试器):用于调试程序和检查内存。Python:用于制作payload。pwntools(可选):一个帮助开发漏洞利用的Python库(后期有用)。你可......
  • 【linux应用】解析 Linux 下 53 端口占用的现象
    在Linux系统中,端口53往往是与域名解析服务(DNS)相关的。本文将详细介绍一个与端口53相关的情景,以及如何使用命令行工具来解析和理解这一现象。现象用户可能会遇到类似以下的信息:systemd-r20245systemd-resolve13uIPv4216305calhost:domainsystemd-r202......
  • linux c --- 创建子进程 system() 与 exec() 的区别
    功能差异:system()函数的主要功能是执行一个系统命令,这个命令由用户通过命令行参数传递给system()函数。system()函数会创建一个新的进程来执行这个命令,并等待这个进程执行完毕后才返回。因此,system()函数主要用于执行简单的、可以通过命令行传递参数的系统命令。exec()函数则是......
  • linux开机自启运行命令
    1、授权chmoda+x/etc/rc.d/rc.local2、编辑文件输入需要开机自启的命令vim/etc/rc.d/rc.local#格式是/usr/bin/nohup运行命令&#这种方式可以不用担心运行的命令是前台进程还是后台进程/usr/bin/nohup/usr/bin/java-jar/data/rocketmq-dashboard-1.0.1-SNAPSH......
  • 第23天Linux下常用工具(二)
    目录第四章GDB调试工具4.1gdb的作用4.2调试代码的流程4.3gdb的安装4.4gdb的使用第五章makefile工程管理工具5.1makefile的作用5.2makefile的运行5.3make的安装5.4makefile的编写方法5.5makefile的语法5.6makefile使用示例第四章GDB调试工具4.1gdb的作用代......
  • Linux基本指令(上)(1)
    文章目录前言一、touch二、mkdir三、ls四、pwd五、cd六、rmdir七、rm八、man九、cp十、mv总结前言我在引言篇并没有给出搭建Linux环境的具体措施,若有需求,你可以参考该篇博客搭建Linux环境的两种方式那作为第一课,在假设你已经成功完成了搭建的情况下,我们来学习一些......
  • Linux HTTP代理Squid 基本配置及目标白名单方式限制转发
    LinuxHTTP代理Squid基本变更配置及目标白名单方式限制转发https://www.cnblogs.com/iAmSoScArEd/p/18546341大部分保持默认即可1、文件管理转发白名单sudotouch/etc/squid/whitelistipsudotouch/etc/squid/whitelistdomain#目的地ip地址aclwhitelistipdst"/etc/s......
  • Linux线程
    线程1.1线程概述1.2线程常用API线程方法使用创建线程#include<pthread.h>intpthread_create(pthread_t*restricttidp,constpthread_attr_t*restrictattr,void*(*start_rtn)(void*),void*restrictarg);//返回值:若成功返回0,否则返回错误编号详情介绍:  ......
  • Linux基础入门2
    建议先看一声明:学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频微信公众号:泷羽sec文件系统权限Linux系统中一切都是文件1.查看权限ls......