发新帖

发现一个能有效避免内存不足导致的卡死的软件:earlyoom

duanyao / 2017-6-28 21:58
浏览: 2077 / 回复: 64
查看: 2077|回复: 67

发现一个能有效避免内存不足导致的卡死的软件:earlyoom

[复制链接]
收藏
跳转到指定楼层
本帖最后由 duanyao 于 2017-10-19 09:49 编辑

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

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

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

建议 deepin 预装这个软件,我相信它能避免相当数量的卡死问题。
注:目前(2017.9) deepin 已经收录了此软件,但没有预装,大家可以用 sudo apt install earlyoom 安装试用。安装后不必做什么,下次重启系统后自动生效。

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

评分

参与人数 2贡献 +2 收起 理由
chaojun56 + 1 加分鼓励 : )
bnbvb + 1 感谢解答 : )

查看全部评分

233

主题

1万

帖子

4万

积分

d-rw-rw-r--

Rank: 8Rank: 8

积分
41126
jingle 官方管理员 发表于 2017-6-29 09:14:44 | 显示全部楼层
谢谢推荐,先研究下。
欢迎来到深度科技社区!

发帖求助前,请先阅读:深度操作系统新手指引(FAQ)

48

主题

1657

帖子

5616

积分

drw-r--r--

Rank: 7Rank: 7Rank: 7

积分
5616
QQ
kirigaya 超级版主 发表于 2017-6-29 09:27:08 | 显示全部楼层
我觉得还是加钱升内存才是解决之道。自从加了2G内存,6G情况下就没卡过。

40

主题

201

帖子

655

积分

-r--r--r--

Rank: 3Rank: 3

积分
655
jeryjian861011 发表于 2017-6-29 09:27:54 | 显示全部楼层
希望能内置在系统里,这样我们这些小白就不会因为不懂怎样配置软件而头痛

233

主题

1万

帖子

4万

积分

d-rw-rw-r--

Rank: 8Rank: 8

积分
41126
jingle 官方管理员 发表于 2017-6-29 09:37:03 | 显示全部楼层
刚才讨论了 这个方案可能谁kill其他的应用 导致数据丢失,已经有大神在解决了
欢迎来到深度科技社区!

发帖求助前,请先阅读:深度操作系统新手指引(FAQ)

24

主题

451

帖子

1759

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1759
udfk007 志愿者 发表于 2017-6-29 09:46:49 | 显示全部楼层
kirigaya 发表于 2017-6-29 09:27
我觉得还是加钱升内存才是解决之道。自从加了2G内存,6G情况下就没卡过。

8G内存的我,该卡时也卡。

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 09:54:11 | 显示全部楼层
kirigaya 发表于 2017-6-29 09:27
我觉得还是加钱升内存才是解决之道。自从加了2G内存,6G情况下就没卡过。

我认为并不是(我有8G内存)。用户很多时候无法预测一个程序会使用多少内存,比如开一个网页用多少内存?这要看网页的复杂程度和浏览器的实现,以及一些偶然因素。还有就是软件的内存泄漏,这是多少内存也救不了的。 操作系统绝对不应该因为普通应用程序的问题而卡死。

4

主题

714

帖子

2177

积分

drw-r--r--

Rank: 7Rank: 7Rank: 7

积分
2177
WangYaohua 超级版主 发表于 2017-6-29 09:55:33 | 显示全部楼层
小内存就不要考虑使用chrome了,另外,也可以试试  https://github.com/Nefelim4ag/systemd-swap
Deepin Developer

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 10:05:17 | 显示全部楼层
jingle 发表于 2017-6-29 09:37
刚才讨论了 这个方案可能谁kill其他的应用 导致数据丢失,已经有大神在解决了 ...

不知道你们的解决思路是什么,能否透露一二?

我觉得在现阶段,linux 桌面在内存耗尽的时候丢失数据是无法完全避免的,问题只在于丢失的多少。
要么是一两个耗内存的应用被杀死而丢数据,要么是整个系统硬重启而丢数据,前者总还是好一些。

我觉得目前最优雅的解决方案,还是 android 的 low memory killer (当然 iOS 也类似),在内存接近耗尽时,先通知所有应用,让它们保存状态,等一段时间后再杀死非前台的应用。然而 linux 桌面似乎还没有类似的通知机制(也可能我不知道,但显然没有广泛采用),所以 earlyoom 似乎是现阶段相对靠谱的方案了。希望未来能引入类似 android 的机制。

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 10:11:23 | 显示全部楼层
WangYaohua 发表于 2017-6-29 09:55
小内存就不要考虑使用chrome了,另外,也可以试试  https://github.com/Nefelim4ag/systemd-swap ...

我的内存并不小(8G),另外我开那么多耗内存的程序当然是为了测试。
另外重点并不是“小于xG内存就不要用y软件”了,因为软件太多了,光是基于 blink/webkit 内核的程序就一大堆(vs code,electron等),重点是任何情况下,操作系统不应该被普通应用搞死。

1

主题

352

帖子

1020

积分

-rw-r--r--

Rank: 4

积分
1020
wtz 发表于 2017-6-29 10:17:02 | 显示全部楼层
http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=476652

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 10:34:35 | 显示全部楼层

这个帖子很老了,讨论的问题和解决方案并不超出我的认知范围。我关注这个问题也有好几年了,查阅了很多资料,自己也做了一些测试,确认不论打开或关闭 swap 分区、调整 swap 参数等都是无效的,最近又确认 OOM killer 是经常无效的,earlyoom 看来是比较有希望的。

这两个问答希望感兴趣的人读一读(其实 earlyoom 的文档也引用了它们):

https://unix.stackexchange.com/q ... -on-forced-swapping

https://superuser.com/questions/ ... vent-earlier/708430

4

主题

714

帖子

2177

积分

drw-r--r--

Rank: 7Rank: 7Rank: 7

积分
2177
WangYaohua 超级版主 发表于 2017-6-29 10:49:13 | 显示全部楼层
noahsai 发表于 2017-6-29 10:01
胡说,昨晚我还在用1g内存的上网本用chrome逛淘宝~~完全没事。
只不过,我用的是xfce4,d ...

你装个chrome不用还更没事呢
Deepin Developer

4

主题

714

帖子

2177

积分

drw-r--r--

Rank: 7Rank: 7Rank: 7

积分
2177
WangYaohua 超级版主 发表于 2017-6-29 10:50:20 | 显示全部楼层
duanyao 发表于 2017-6-29 10:11
我的内存并不小(8G),另外我开那么多耗内存的程序当然是为了测试。
另外重点并不是“小于xG内存就不要 ...

这句话没毛病
Deepin Developer

4

主题

714

帖子

2177

积分

drw-r--r--

Rank: 7Rank: 7Rank: 7

积分
2177
WangYaohua 超级版主 发表于 2017-6-29 10:50:26 | 显示全部楼层
duanyao 发表于 2017-6-29 10:11
我的内存并不小(8G),另外我开那么多耗内存的程序当然是为了测试。
另外重点并不是“小于xG内存就不要 ...

这句话没毛病
Deepin Developer

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 11:10:32 | 显示全部楼层
本帖最后由 duanyao 于 2017-6-29 11:11 编辑

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

15

主题

933

帖子

3022

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
3022
QQ
jdocker 发表于 2017-6-29 11:19:42 来自移动端 | 显示全部楼层
duanyao 发表于 2017-6-29 11:10
补充:想了一下,还是把我这些年调查内存不足导致卡死的问题是做的笔记发上来(见一楼的附件)。很凌乱,没 ...

这个确实可以单独发帖,支持。

0

主题

18

帖子

246

积分

-r--r-----

Rank: 2

积分
246
raphaelzhang 发表于 2017-6-29 11:32:55 | 显示全部楼层
楼主有心了,谢谢

主要的问题在于深度桌面的目标用户是普通用户,在普通用户没有知晓的情况下突然杀死一个进程实际上是蛮惊悚的,在系统设计上不好。

对于熟悉Linux的人来说,在桌面遇到了响应慢的问题,比较常见的方法是tty -> top -> kill,这个很快的。

对于普通用户来说,比较好的方式是通过任务管理器杀进程。

对于内核的oom-killer来说,其实它主要的用途是长期无人值守运行的机器上杀进程,因为没有交互,所以等待时间略长也没啥。当然,这对于桌面这种人机交互多的来说确实不好,在这个意义上,earlyoom是有用的,但是就像之前说的那样,普通用户应该用任务管理器,高手会tty->top->kill,所以有点鸡肋。最主要的是,用户应该有决定权,而不是无法控制哪个程序被杀。

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 11:35:09 | 显示全部楼层
jdocker 发表于 2017-6-29 11:19
这个确实可以单独发帖,支持。

谢谢支持,不过单独发帖的话,还是等我整理整理吧,让大家能看明白。

13

主题

761

帖子

1952

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
1952
duanyao 发表于 2017-6-29 11:49:45 | 显示全部楼层
raphaelzhang 发表于 2017-6-29 11:32
楼主有心了,谢谢

主要的问题在于深度桌面的目标用户是普通用户,在普通用户没有知晓的情况下突然杀死一个 ...

没这么简单,真的。有时候响应慢会达到 tty 登录都要好几分钟,甚至登录失败的程度,打字的延迟可能要好几秒,top/kill 不可能进行,这都是亲身经历。你还可以看看13楼的链接,遇到这个问题的不在少数,很多都是有经验的用户。

oom-killer 对服务器来说很多情况下也是不合适的,因为很多服务的延迟是很重要的(比如web服务器)。与其让服务器卡住几十分钟,还不如尽快杀死服务再重启(systemd 等可以自动重启崩溃的服务)。

至于缺少用户交互的问题,我觉的可以借鉴 Windows 的“内存不足”提示框。earlyoom 默认在可用内存 10% 时触发,那么 deepin 的“内存不足”提示框可以在 12%-15% 触发,让用户有机会保存数据。当然最根本的解决之道还是学习 android、iOS,让系统通知应用自动保存状态,然后再杀掉应用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回版块 返回顶部