发现一个能有效避免内存不足导致的卡死的软件:earlyoom
Tofloor
poster avatar
duanyao
deepin
2017-06-29 05:58
Author
本帖最后由 duanyao 于 2019-7-30 19:45 编辑

网站: https://github.com/rfjakob/earlyoom

文档的解说已经很详细了,不过因为是英文,我简单介绍一下:
Linux 内核中的 oom-killer 严重不靠谱,往往触发得太迟。在它工作之前,系统往往已经没救了,或者用户已经被卡得失去耐心,按了重启键。
earlyoom 是个用户态服务,顾名思义它会较早的触发(默认条件是可用物理内存和交换分区都不足10%),杀掉内存消耗最多的进程,避免系统卡死。

我试了一下还是挺有效的,用 android-studio 编译一个大工程时,它先后杀掉了 chrome、 firefox、vs code,编译得以顺利完成。

建议 deepin 预装这个软件,我相信它能避免相当数量的卡死问题。

注:2017.9  deepin 已经收录了此软件,但没有预装,大家可以用 sudo apt install earlyoom 安装试用。安装后不必做什么,下次重启系统后自动生效。
注2:2019.7 deepin 15.9.2 - 15.11 稳定版仓库里没有此软件(预计v 20恢复),你可以装 debian 仓库里的: http://ftp.cn.debian.org/debian/pool/main/e/earlyoom/earlyoom_1.2-1_amd64.deb

补充:想了一下,还是把我这些年调查内存不足导致卡死的问题是做的笔记发上来。很凌乱,没什么条理,不过里面的很多链接应该是有参考价值的。
发上来的主要目的是说明:我并非是偶尔看到一个软件就兴冲冲的推荐了,这后面是有大量铺垫的。linux_memory_swap_thrashing.zip

linux_memory_swap_thrashing.zip


再补充:还没有经历过内存不足卡死,或者喜欢作死的小伙伴,可以试试这个小程序:

http://launchpadlibrarian.net/23372552/memory_overcommit.cc

来源是 ubuntu 的一个 bug 报告 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/159356
下载后用 c++ 编译,运行。你需要输入每次分配的内存大小,单位 M,直接回车表示与上次相同。
如果剩余物理内存很多可以500M每步,剩余500M左右时改为100M每步,剩余100M左右时改为30M每步,而且不要太快。这很重要,如果最后阶段步子太大、太快,很容易被OOM killer 迅速杀掉。
剩余物理内存用系统监视器或free看就行。

在我的机器(机械硬盘)上,如果关闭 earlyoom (systemctl stop earlyoom),它几乎 100% 能卡死。之前我用的测试方法(浏览器开很多页面、开虚拟机、android-studio)太繁琐了,还是这个好。

为了从卡死中恢复,可以这么做:在运行 memory_overcommit.cc 之前,先修改 /etc/sysctl.d/99-sysctl.conf (也可能是同一目录下的其它名字),把 kernel.sysrq=0 (或其它值)改为 kernel.sysrq=1 ;然后重启系统,或执行 sudo sysctl kernel.sysrq=1 立即生效。

在卡死后,按下组合键 alt + sysrq + r  然后按 alt + sysrq + f ,这是为了手工执行 oom killer。oom killer 可能要延迟几秒钟才执行,所以不要急不可耐的反复按 alt + sysrq + f ,以免杀掉很多无辜进程。sysrq 就是 print screen 键。

Reply Favorite View the author
All Replies
4 / 5
To page
imgradeone
deepin
2017-10-18 21:26
#61
Stared!2G运存急需啊
Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2017-10-19 07:30
#62
为什么Windows没有这个问题,是因为他有一个虚拟内存的原因吗?
Reply View the author
duanyao
deepin
2017-10-19 17:38
#63
https://bbs.deepin.org/post/141744
为什么Windows没有这个问题,是因为他有一个虚拟内存的原因吗?

虚拟内存各种操作系统都有,Linux一般叫做交换分区或交换文件。Windows 也有这问题,Linux 用户也不是人人都遇到这个问题,说到底跟具体运行的程序有关系。Windows 好的地方在于(1)内存不足时有提醒,(2)内存不足时调出任务管理器更可靠一些。
Reply View the author
deepin-newbird
deepin
2017-11-20 04:09
#64
https://bbs.deepin.org/post/141744
8G内存的我,该卡时也卡。

我也8g内存, 卡的怀疑人生.
Reply View the author
flyrose25
deepin
2017-12-16 06:24
#65
这个得收藏一下。有用!
Reply View the author
黑色
deepin
2017-12-17 20:45
#66
无奈内存太贵了,8G日常都是占用率70往上,哎
Reply View the author
jerry79
deepin
2017-12-17 22:37
#67
我的12g,已经多次卡死了,tty也没用,决定用用试试
Reply View the author
semideity
deepin
2017-12-17 22:39
#68
linux已经很好了,不容易卡死。我用仿真软件,不小心跑满64G内存,windows下只能强制重启;linux下每次都能从容点“取消计算”的按钮。
Reply View the author
sysop
deepin
2018-02-22 20:11
#69
改为 kernel.sysrq=1 后快捷键还是没反应怎么办?
alt + sysrq + r   alt + sysrq + f  就截图了  earlyoom 没启动







    Mozilla/5.0 (Wayland; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0  (zh-CN)
    ——2018/2/22 下午12:11:13
             
    Reply View the author
    junmoxiao
    deepin
    2018-02-23 01:15
    #70
    16g内存不知道你们在讨论啥
    Reply View the author
    duanyao
    deepin
    2018-02-28 02:04
    #71
    https://bbs.deepin.org/post/141744
    改为 kernel.sysrq=1 后快捷键还是没反应怎么办?
    alt + sysrq + r   alt + sysrq + f  就截图了  earlyoom ...

    切到 ctrl+alt+f2 控制台,按 alt + sysrq + r 试试。应该输出一行字:sysrq: keyboard set to system default.
    Reply View the author
    junmoxiao
    deepin
    2018-02-28 04:06
    #72
    16g内存表示情绪稳定
    Reply View the author
    873792861
    deepin
    2018-02-28 20:16
    #73
    https://bbs.deepin.org/post/141744
    小内存就不要考虑使用chrome了,另外,也可以试试  https://github.com/Nefelim4ag/systemd-swap ...

    用chrome4年了,其它浏览器都用不顺手
    Reply View the author
    sysop
    deepin
    2018-03-07 05:02
    #74
    https://bbs.deepin.org/post/141744
    切到 ctrl+alt+f2 控制台,按 alt + sysrq + r 试试。应该输出一行字:sysrq: keyboard set to system de ...

    还是不行 没反应 只有蜂鸣声







      Mozilla/5.0 (Wayland; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0  (zh-CN)
      ——2018/3/6 下午9:02:36
               
      Reply View the author
      duanyao
      deepin
      2018-03-08 18:48
      #75
      本帖最后由 duanyao 于 2018-3-8 10:51 编辑
      https://bbs.deepin.org/post/141744
      还是不行 没反应 只有蜂鸣声

      不应该啊,检查一下 kernel.sysrq 的值:
      sysctl kernel.sysrq
      如果确实是1,看看你的键盘是否有特殊的布局:
      https://fedoraproject.org/wiki/Q ... C_what.27s_wrong.3F
      Reply View the author
      sysop
      deepin
      2018-03-08 19:26
      #76
      https://bbs.deepin.org/post/141744
      不应该啊,检查一下 kernel.sysrq 的值:
      sysctl kernel.sysrq
      如果确实是1,看看你的键盘是否有特殊的布 ...

      可以了 可能我组合键按的顺序不对吧 后按r就好了







        Mozilla/5.0 (Wayland; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0  (zh-CN)
        ——2018/3/8 上午11:26:03
                 
        Reply View the author
        深圳市耀影科技有限公司
        deepin
        2021-05-02 19:17
        #77

        20G内存 都不够用 主要是一满立马卡死

        Reply View the author
        SamLukeYes
        deepin
        2021-05-02 19:31
        #78
        深圳市耀影科技有限公司

        20G内存 都不够用 主要是一满立马卡死

        用 earlyoom 就不会卡了。而且 earlyoom 默认是先用 SIGTERM 而不是上来就 SIGKILL,让进程有机会安全退出。

        Reply View the author
        深圳市耀影科技有限公司
        deepin
        2021-05-02 20:46
        #79
        SamLukeYes

        用 earlyoom 就不会卡了。而且 earlyoom 默认是先用 SIGTERM 而不是上来就 SIGKILL,让进程有机会安全退出。

        这个是否真的有效,主要DDE应该有一个系统接管机制,达到某种的时候应该让程序拉慢发出警报,而不是直接卡死,我是SSD硬盘20G内存,交换空间16G,只要物理内存一到100%立马卡死,交换空间基本无用

        Reply View the author
        SamLukeYes
        deepin
        2021-05-02 21:07
        #80
        深圳市耀影科技有限公司

        这个是否真的有效,主要DDE应该有一个系统接管机制,达到某种的时候应该让程序拉慢发出警报,而不是直接卡死,我是SSD硬盘20G内存,交换空间16G,只要物理内存一到100%立马卡死,交换空间基本无用

        earlyoom 比较简单,我不确定它有没有提示的功能,但其他同类软件可能有。你说的“交换空间无用”,是不是因为 swappiness 设置得太小了?

        Reply View the author
        4 / 5
        To page