返回顶部
首页 > 资讯 > 操作系统 >如何理解Linux内核参数overcommit_memory和OOM killer
  • 847
分享到

如何理解Linux内核参数overcommit_memory和OOM killer

2023-06-05 22:06:03 847人浏览 八月长安
摘要

如何理解linux内核参数overcommit_memory和OOM killer,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux Overcommit和OOMo

如何理解linux内核参数overcommit_memory和OOM killer,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

什么是Linux Overcommit和OOM

overcommit_memory是一个内核对内存分配的一种策略,它有三个可选值:0、1、2。

0. 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,

并把错误返回给应用进程。

表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

表示内核允许分配超过所有物理内存和交换空间总和的内存。

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。

这种技术叫做 Overcommit。

当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程

(用户态进程,不是内核线程),以便释放内存。

例如Linux下发现有如下报错信息,则说明系统发生了OOM killer

# dmesg | grep redis | grep "oom-killer"

Redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0

redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

当oom-killer发生时,linux会选择杀死该进程,例如:

Out of memory: Kill process 21809 (redis-server) score 951 or sacrifice child

Killed process 21809, UID 0, (redis-server) total-vm:33466920kB, anon-rss:32324096kB, file-rss:100kB

具体杀死哪个进程取决于选择进程的函数,选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数

会计算每个进程的点数(0~1000)。

点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被

设置(-1000最低,1000最高)。

理解memory overcommit的关键:commit(或overcommit)针对的是内存申请,内存申请不等于内存分配,内存

只在实际用到的时候才分配。

备注:

如何修改Linux vm.overcommit_memory的值,可用的方法有以下三种:

1).以root身份登录Linux,编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效

2).sysctl vm.overcommit_memory=1

3).echo 1 > /proc/sys/vm/overcommit_memory

看完上述内容,你们掌握如何理解Linux内核参数overcommit_memory和OOM killer的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网操作系统频道,感谢各位的阅读!

--结束END--

本文标题: 如何理解Linux内核参数overcommit_memory和OOM killer

本文链接: https://lsjlt.com/news/244885.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解Linux内核参数overcommit_memory和OOM killer
    如何理解Linux内核参数overcommit_memory和OOM killer,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux Overcommit和OOMo...
    99+
    2023-06-05
  • 如何修改Linux内核参数vm.swappiness
    目录修改linux内核参数vm.swappiness调整vm.swappiness的方法了解vm.swappiness使用交换vm.swappiness小结一下吧总结修改Linux内核参数vm.swappiness 内核...
    99+
    2023-02-10
    修改Linux内核参数 vm.swappiness Linux内核参数
  • Linux内核模块参数如何修改
    本篇内容主要讲解“Linux内核模块参数如何修改”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内核模块参数如何修改”吧!内核模块是Linux操作系统中一个比较独特的机制,采用模块化技术...
    99+
    2023-06-27
  • 如何理解Linux内核编译
    这篇文章给大家介绍如何理解Linux内核编译,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言(仅供参考)linux内核该如何学习安装vmware虚拟机或者virtualbox,再安装发行版本linuxwww.ke...
    99+
    2023-06-15
  • 如何理解Linux内核中Watchdog
    这期内容当中小编将会给大家带来有关如何理解Linux内核中Watchdog,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Linux内核中有三个watchdog,它们都需要被悉心的喂养照料,分别是: /d...
    99+
    2023-06-15
  • Linux中如何优化系统性能和调整内核参数
    使用性能工具:Linux提供了许多性能工具,如top、vmstat、iostat等,可以帮助您监控系统的性能状况,找出性能瓶颈所...
    99+
    2024-04-02
  • 如何理解Linux内核信号量
    本篇文章给大家分享的是有关如何理解Linux内核信号量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。概念Linux内核的信号量在概念和原理上和用户态的System V的IPC机...
    99+
    2023-06-15
  • 如何理解Linux内核的文件
    本篇内容介绍了“如何理解Linux内核的文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux文件预读算法磁盘I/O性能的发展远远滞后...
    99+
    2023-06-13
  • LINUX下ORACLE相关的内核参数详解
    ORACLE相关的内核参数详解1、kernel.sem[root@test ~]# cat /proc/sys/kernel/sem250     &nbs...
    99+
    2024-04-02
  • Linux系统如何通过grub添加内核参数
    这篇文章给大家介绍Linux系统如何通过grub添加内核参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux内核在启动时我们可以为其提供各种参数来自定义内核的默认行为,内核参数应在内核启动时通过引导装载程序,如...
    99+
    2023-06-28
  • Linux内核中的数据双链表如何理解
    这篇文章给大家介绍Linux内核中的数据双链表如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux 内核中自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会首...
    99+
    2023-06-28
  • 怎么理解Oracle中的sysctl.conf内核参数
    本篇内容介绍了“怎么理解Oracle中的sysctl.conf内核参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • 如何在CentOS中调整内核参数
    要在CentOS中调整内核参数,您可以按照以下步骤操作: 查看当前内核参数的值: 您可以使用以下命令查看当前系统的内核参数: s...
    99+
    2024-04-02
  • Fedora中如何调优系统内核参数和设置
    在Fedora中调优系统内核参数和设置可以通过修改/sys/目录下的文件或者使用sysctl命令来实现。以下是一些常见的调优方法: ...
    99+
    2024-04-02
  • Linux 下安装Oracle 时/etc/sysctl.conf内核参数如何设置
    小编给大家分享一下Linux 下安装Oracle 时/etc/sysctl.conf内核参数如何设置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在安装Oracle的时候需要调整linux...
    99+
    2024-04-02
  • 如何从TCP/IP协议讨论Linux内核参数优化
    这篇文章给大家介绍如何从TCP/IP协议讨论Linux内核参数优化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在硬件资源有限的情况下,最大的压榨服务器性能,提高服务器的并发处理能力,是很多技术人员思考的问题,除了优化...
    99+
    2023-06-16
  • linux如何查看cpu核数和内存大小
    要查看Linux系统下的CPU核数和内存大小,可以使用以下命令:1. 查看CPU核数:使用命令`cat /proc/cpuinfo ...
    99+
    2023-09-08
    linux
  • 如何理解Linux驱动中内核互斥锁
    如何理解Linux驱动中内核互斥锁,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mut...
    99+
    2023-06-15
  • linux如何调节和维护内核
    本篇内容主要讲解“linux如何调节和维护内核”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux如何调节和维护内核”吧!作为用户程序和系统硬件之间的接口,内核在确保Red Hat Ente...
    99+
    2023-06-13
  • 如何理解Linux内核驱动的编码风格
    本篇文章给大家分享的是有关如何理解Linux内核驱动的编码风格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作