问题描述

今天早上,按照惯例开始完成之前的半成品博客,内容是描述 modpost 的原理。描述的过程中,我同时执行一些命令来采集输出,我写得正爽的时候,执行了 make -j 命令编译后系统卡住了,之前遇到过一次,应该是 oom 了。

不过也没啥大不了的,等几分钟就会恢复,之前遇到的时候貌似对我没有啥影响,等了几分钟,系统恢复正常后,发现 firefox 重启了!恢复之前的 session 后我发现我之前写的博客内容全部丢失了,这就不好玩了!

oom 是啥?

oom 是 out of memory 的简称,是系统内核耗尽时的一种恢复机制,它会按照一些策略选取进程杀死以释放空间。

我的 firefox 进程被 oom 策略选中后被杀死,而且我之前没有保存草稿,数据就这样丢失了。

我查看 dmesg 信息找到了下面这些内容:

[212840.264294] Out of memory: Kill process 29823 (gnome-shell) score 4 or sacrifice child
[212840.264339] Killed process 29823 (gnome-shell) total-vm:3794112kB, anon-rss:684kB, file-rss:0kB, shmem-rss:0kB
[212840.272901] oom_reaper: reaped process 29823 (gnome-shell), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

这里明确表示触发了 oom,然后 oom 选中了 gnome-shell 进程杀死,释放内存空间。也许我该庆幸系统没有一直死锁,这是 oom 经常遇到的问题,在一些情况下当系统检测到了 oom 之后已经为时已晚,这样系统会整个挂死,如果有看门狗,应该会在既定的时间后重启。

用户态 early-oom-killer 可以用来解决这个问题,不过它不是这里要说明的重点,直接跳过。

为什么 firefox 会躺枪呢?

oom 杀死进程没有什么大不了的,我的问题在于为什么 firefox 也会被杀掉呢?dmesg 不是显示 gnome-shell 被杀了吗?

我并不是在一个 shell 中启动的 firefox,而是通过系统启动项目启动的,firefox 是怎样跟一个 gnome-shell 挂上钩的呢?

pstree 查看进程信息,得到了如下内容:

systemd-+-ModemManager---2*[{ModemManager}]||-gdm3-+-gdm-session-wor-+-2*[gdm-session-wor---2*[{gdm-session-wor}]]|      |                 |-gdm-x-session-+-Xorg---3*[{Xorg}]|      |                 |               |-gnome-session-b-+-evolution-alarm---5*[{evolution-alarm}]|      |                 |               |                 |-gnome-shell-+-firefox-esr-+-Web Content---46*[{Web Content}]|      |                 |               |                 |             |             |-Web Content---51*[{Web Content}]|      |                 |               |                 |             |             |-Web Content---32*[{Web Content}]|      |                 |               |                 |             |             |-Web Content---48*[{Web Content}]|      |                 |               |                 |             |             `-70*[{firefox-esr}]|      |                 |               |                 |             |-guake-+-bash-+-less|      |                 |               |                 |             |       |      `-pstree|      |                 |               |                 |             |       `-3*[{guake}]|      |                 |               |                 |             `-21*[{gnome-shell}]

从上面的进程树中可以看出,gnome-shell 是 firefox-esr 的父进程,有了这个信息我就明白了,应该是杀了父进程带来的影响,而且这个父进程不只是父进程这么简单,应该跟 session 有关。

我的笔记本电脑的内存配置

我的电脑的内存信息如下:

[longyu@debian-10:10:05:31] ~ $ free -htotal        used        free      shared  buff/cache   available
Mem:          7.6Gi       1.6Gi       3.4Gi       197Mi       2.6Gi       5.5Gi

只有 8G 可以用,算比较少了,make -j 创建了多个线程的时候很容易耗尽内存!

打破清晨喧嚣的 oom相关推荐

  1. 离开宁静的农村,走进喧嚣的城市:搬家!

    在希腊神话"赫拉克里斯"里,安泰俄斯(维基百科:Antaeus)是大地之母的儿子,只要他双脚不离地,便有无穷尽的力量.后来他被赫拉克里斯举起,最终被扼死.我是农民的儿子,我总感觉我 ...

  2. 第一卷清晨的帝国 第一百四十三章 辩难始

    第一卷清晨的帝国 第一百四十三章 辩难始 用天谕院副院长莫龘离神官的解释是,隆庆皇子自西陵前来大唐都城长安的路上偶感风寒,所以前些日子一直在桃花巷中静养清心,所以一直未能拜望自己的兄长,而今日得知太子 ...

  3. 视频 | 太壮观了!阿尔乌拉打破全球最大热气球发光表演纪录

    沙特阿拉伯阿尔乌拉2022年3月11日 /美通社/ -- "阿尔乌拉时刻"(AlUla Moments)活动携手沙特阿拉伯热气球联合会(SAHAB)共同打破了全球最大规模热气球发光 ...

  4. 打破时间的束缚(转)

    无固定的日程安排. 无必须参加的会议.Best Buy公司的职场正在发生根本的变革,让我们一窥究竟 2005年的一天下 午,在Best Buy公司负责网上定单业务的查普?阿肯关上了电脑,然后起身说他要 ...

  5. 由 OOM 引发的 ext4 文件系统卡死

    注:本问题影响 3.10.0-862.el7.centos 及之后的 CentOS 7 版本内核,目前问题还未被修复. 背景 近日,我司的测试同学发现内部集群中一个存储节点无法通过 ssh 访问了.i ...

  6. 愿我是清晨洒入你心间的第一缕阳光

    愿我是清晨洒入你心间的第一缕阳光 给你温暖,给你力量,用光芒将你紧紧拥入怀中 不让外面尘世的嘈杂与喧嚣打扰到你分毫 只为了看卧榻上的你那与世无争甜甜的笑容 愿我是清晨润泽你心田的第一滴雨露 在天使还没 ...

  7. 撒币分钱、喧嚣乱战之后,直播答题2.0更具商业想象力?

    从1月27日开始,央视财经频道连续5天6场的直播答题专场活动将直播答题游戏推向了新的高潮.从城市到农村,从大人到小孩,一股全民答题热潮开始席卷全国. 直播答题游戏正成为国民娱乐新方式. 一.直播答题是 ...

  8. 喧嚣的闹市:手机AI的通货膨胀时代|手机AI的旅行地图二

    虽然只过去了一个季度,但如果为2018年的手机行业找一个关键词,那人工智能会有很大概率当选. 以华为和苹果为首,这两家厂商在手机中加入人工智能概念之后,好像一夜之间其他各个厂商都醍醐灌顶,实现了技术突 ...

  9. 打破时空壁垒,智慧“中枢”助您搭建理想生活

    清晨,一缕阳光照进屋内,你慢慢苏醒,智能窗帘缓缓打开,智能睡眠显示昨晚翻身起夜等数据在正常范围内,元气满满的一天就此开始: 提前定时的面包机.蒸蛋器.豆浆机早已在你睡梦时启动,睡醒即可享受健康营养早餐 ...

最新文章

  1. SQL标准结构化语言练习,SQL增删查改,SQL实现对bank数据的操作
  2. 配置学习Go的编辑器:配置TextMate
  3. 第一章——数据结构之绪论
  4. 网络游戏中用到哪些计算机技术,美术设计中计算机技术的应用论文
  5. 如何使用计算机中的导出,如何将iPhone手机中的音乐导出至电脑
  6. graphpad如何检测方差齐_如何选择方差分析中“多重比较”的方法?
  7. cs231n课程作业踩坑汇总
  8. 基于visual Studio2013解决C语言竞赛题之0204实数求值
  9. 天才程序员之陨落:业余项目创业 Cloudflare,公司上市前患病失去自理能力
  10. 挂载ntfs_Linux识别移动硬盘ntfs格式
  11. C++11多线程中的detach()、join()、joinable()
  12. CISCO路由器的备份与还原(2)
  13. Lattice Diamond 3.12下载与安装(免费获取license.dat)
  14. WIN10系统不小心点击了显示语言栏怎么恢复
  15. 跨文化交际复习题及答案(超全的)
  16. 机器学习从抬脚到趴倒在门槛No.34
  17. python turtle画中国象棋_python使用turtle绘制国际象棋棋盘
  18. java实现 一维装箱问题_装箱问题(Bin packing problem)
  19. GitHub + jsDelivr + PicGo + Imagine 打造稳定快速、高效免费图床
  20. NoClassDefFoundError: Could not initialize class:XXX

热门文章

  1. 干货 | 区块链项目估值的逻辑和误区
  2. (弃更)一些黑科技和技巧
  3. 【读书笔记】小狗钱钱
  4. 科技的成就(三十六)
  5. 只要你懂得人性,就不怕没钱赚!
  6. 怎么批量提取网站中的内容-免费网页数据提取软件
  7. 《APP开发》APP规范实例-详细的UI设计方法
  8. 什么是混合云、公有云、私有云?
  9. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
  10. Linux系统用C语言设计酒店管理系统