oom-kill内核源码剖析

开场白:历史已经成为过去,而过去的却已经埋藏在看不见的沙子里面,成为不了历史

代码存放:/mm/oom_kill.c
主函数: void out_of_memory(int gfp_mask)
主要功能如下:
    1)调用select_bad_process(void)函数返回选择删除的进程的task_struct结构体
    2)调用oom_kill_process(struct task_struct *p)函数对进程发出终止信号

辅助函数说明:select_bad_process(void)
遍历所有的进程(进程1除外),按照一定的算法统计出当前进程的预算值,将预算值最大的进程描述符返回。其中调用badness函数统计每个进程的预算值。

对于badness函数,将根据内存占用量,启动使用时间和CPU占用时间,是否是root权限进程,尤其是直接访问硬件,所以实际情况上,可能我们需要根据自己的系统进行修改。实际上这是非常有异常的。

辅助函数说明:oom_kill_process(struct task_struct *p)
并没有终止父进程,而是终止父进程中的一个子进程,然后就退出了,如果当前父进程没有子进程,尝试终止自己。所以终止的这个进程未必能够解决问题。当然很可能会被多次调用,但是不一定会解决问题。
时间: 2024-10-13 03:35:10

oom-kill内核源码剖析的相关文章

(升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课程会涵盖Scala编程详解.Spark核心编程.Spark SQL和Spark Streaming.Spark内核以及源码剖析.性能调优.企业级案例实战等部分.完全从零起步,让学员可以一站式精通Spark企业级大数据开发,提升自己的职场竞争力,实现更好的升职或者跳槽,或者从j2ee等传统软件开发工程

Linux 系统调用 —— fork 内核源码剖析

系统调用流程简述 fork() 函数是系统调用对应的 API,这个系统调用会触发一个int 0x80 的中断: 当用户态进程调用 fork() 时,先将 eax(寄存器) 的值置为 2(即 __NR_fork 系统调用号): ? 执行 int $0x80,cpu 进入内核态: ? 执行 SAVE_ALL,保存所有寄存器到当前进程内核栈中: ? 进入 sys_call,将 eax 的值压栈,根据系统调用号查找 system_call_table ,调用对应的函数: ? 函数返回,执行 RESTOR

linux内核源码剖析-tcp/ip实现--阅读1

这本书一共有33章,从底层开始往上讲,论述了tcp/ip的实现过程: 数据链层->网络层->socket->传输层: 打算从后面开始学,从传输层开始! 传输层-tcp+udp 网络层(IP,ICMP,IGMP,路由以及邻居子系统和ip组播)

Spark2.0从入门到精通:Scala编程、大数据开发、上百个实战案例、内核源码深度剖析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

ucore 源码剖析

lab1 源码剖析 从实模式到保护模式 初始化ds,es和ss等段寄存器为0 使能A20门,其中seta20.1写数据到0x64端口,表示要写数据给8042芯片的Output Port;seta20.2写数据到0x60端口,把Output Port的第2位置为1,从而使能A20门. 建立gdt,此处只设置了两个段描述符,分别对应代码段和数据段 gdt: SEG_NULLASM # null seg SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg

菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t[转]

菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:Nov 14th, 2014 1.共享内存 共享内存是Linux下提供的最基本的进程通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用释放这块内存,使用共享内存的好处是多个进程使用同一块内存

Redis源码剖析和注释(十八)--- Redis AOF持久化机制

Redis AOF持久化机制 1. AOF持久化介绍 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题. RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失. AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的. Redis RDB持久化机制源码剖析和注释 AOF的使用:在redis.conf配置文件中,将appendonly设置为y

《STL源码剖析》---stl_alloc.h阅读笔记

这一节是讲空间的配置与释放,但不涉及对象的构造和析构,只是讲解对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本的STL对空间的的申请和释放做了如下考虑: 1.向堆申请空间 2.考虑了多线程.但是这节目的只是讲解空间配置与释放,因此忽略了多线程,集中学习空间的申请和释放. 3.内存不足时的应变措施 4.考虑到了内存碎片的问题.多次申请释放小块内存可能会造成内存碎片. 在C++中,内存的申请和释放是通过operator new函数和operator delete函数,这两个函数相当于C语

《Apache Spark源码剖析》

Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了Spark源码,深入浅出,细致入微2.提供给读者一系列分析源码的实用技巧,并给出一个合理的阅读顺序3.始终抓住资源分配.消息传递.容错处理等基本问题,抽丝拨茧4.一步步寻找答案,所有问题迎刃而解,使读者知其然更知其所以然 内容简介 书籍计算机书籍 <Apache Spark源码剖析>以Spark