发新帖

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

duanyao / 2017-6-28 21:58
浏览: 1025 / 回复: 58
楼主: duanyao

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

[复制链接]

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

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

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

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
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,让系统通知应用自动保存状态,然后再杀掉应用。

0

主题

14

帖子

206

积分

-r--r-----

Rank: 2

积分
206
raphaelzhang 发表于 2017-6-29 11:58:15 | 显示全部楼层
duanyao 发表于 2017-6-29 11:49
没这么简单,真的。有时候响应慢会达到 tty 登录都要好几分钟,甚至登录失败的程度,打字的延迟可能要好 ...

tty -> top -> kill还好吧,我自己遇到系统延迟时都可以解决,有时候确实有点慢,但几分钟还没有遇到过。

是的,oom-killer在服务器上缺省配置也不一定好,很多时候会造成延迟或者误杀,这个时候其实要做的是调整重要进程的oom值,panic_on_oom值,还有就是增加服务器的资源或者减少进程的预分配资源。

主要是不经用户同意就杀进程不好。

点评

试试 46 楼的程序吧  发表于 2017-6-30 21:23

0

主题

14

帖子

206

积分

-r--r-----

Rank: 2

积分
206
raphaelzhang 发表于 2017-6-29 11:59:15 | 显示全部楼层
本帖最后由 raphaelzhang 于 2017-6-29 12:00 编辑

不过我觉得earlyoom作为一个可选项倒是可以装的,但是不要缺省装,不然用户估计又要抱怨了

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

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

7dd98d1001e939013602dab778ec54e736d19632.jpg

为了减少数据丢失的问题,可以暂时借鉴 Windows 的内存不足提示。比如在可用内存 12%-15%触发提示框,而 earlyoom 在 10% 触发,作为最后的安全网。
长期来看,还是应该借鉴 android 的 low memory killer,让用户能“无忧操作”。

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 12:09:21 | 显示全部楼层
raphaelzhang 发表于 2017-6-29 11:58
tty -> top -> kill还好吧,我自己遇到系统延迟时都可以解决,有时候确实有点慢,但几分钟还没有遇到过。 ...

不知道你的电脑配置如何,这更容易发生在机械硬盘,并运行内存和IO都密集的应用时(例如android-studio、虚拟机)。这个问题说常见吧也不是非常常见,也有很多用户从来没遇到过。

18

主题

400

帖子

2122

积分

-rw-rw-r--

Rank: 5Rank: 5

积分
2122
debuggerx 发表于 2017-6-29 12:10:06 | 显示全部楼层
公司开发机原本8g内存,只开as开发安卓+几十个chrome页面也没问题;
后来连着把后台代码也写了,同时开as和idea,chrome再开几个页面就会卡死;
于是申请加内存,加到了12g,终于又开心地玩耍了一阵;
然而好景不长,后面又开始做其他东西,必须同时开着虚拟机和ide,又开始时不时卡死了……
像这种情况下,确实是只有堆内存才能解决了,软件是无能为力的,,以后真的是得16g起步了。。

2

主题

67

帖子

519

积分

-r--r--r--

Rank: 3Rank: 3

积分
519
rdlg 发表于 2017-6-29 12:10:14 | 显示全部楼层
可能因为Linux长期是作为服务器存在的 感觉这个问题一直没被重视
我之前也调查过这个问题 但是没来得及验证各种猜想
1. 如果确定是持续页面交换导致的 那么减小甚至关闭swap分区是否会有帮助
2. cgroup提供的rss限制是否能够有效遏制这个问题
3. 磁盘读写优先级能否保证某些程序优先相应
4. 是否有类似非换页内存的概念,保证系统关键进程不被换出
从之前使用Windows的经验来看,系统很少因为内存不够出现系统卡死的状况,可能和Windows的图形组件在内核中有关,也可能是因为关键组件存在保护机制。
但是如果是磁盘IO量大,Windows也会卡的不能动,这种情况在Win10之后似乎有所改进,我曾经试过在这种情况下,其他应用都卡的不能动,但是系统的任务管理器在调出来后能够流畅运行。

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 12:11:41 | 显示全部楼层
raphaelzhang 发表于 2017-6-29 11:59
不过我觉得earlyoom作为一个可选项倒是可以装的,但是不要缺省装,不然用户估计又要抱怨了 ...

我觉得可以,先放到源里,让遇到过这个问题的用户试试。

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 12:28:03 | 显示全部楼层
本帖最后由 duanyao 于 2017-6-29 12:38 编辑
rdlg 发表于 2017-6-29 12:10
可能因为Linux长期是作为服务器存在的 感觉这个问题一直没被重视
我之前也调查过这个问题 但是没来得及验证 ...

你可以看看一楼的附件,不过有点太乱,我简单回答一下:

1. 如果确定是持续页面交换导致的 那么减小甚至关闭swap分区是否会有帮助

几乎没有。交换至少有两种,一种是 swap 分区/文件上的交换,一种是 pagecache 的淘汰/填充,后一种的确被很多 linuxer 忽略了。关闭swap分区并不能避免pagecache交换导致的卡死。不过考虑到现在内存和机械硬盘的速度差距是如此之大,关闭 swap 应该有利于保持系统的响应速度(我没有具体的数据),我现在就是关闭的。SSD 就速度来说适合做 swap,但考虑到寿命嘛,就见仁见智了。

2. cgroup提供的rss限制是否能够有效遏制这个问题

有这样的建议,原理上可行,但桌面上还没有开箱即用的方案。

3. 磁盘读写优先级能否保证某些程序优先相应

linux 的磁盘调度器长期没啥大改进了,一直推荐cfq,但它显然不能解决机械硬盘上的卡死问题。最近新的 bfq 进了 4.12 内核,有望改善机械硬盘的调度,但还需要一段时间才能被各发行版采用。我们到时候再看。

4. 是否有类似非换页内存的概念,保证系统关键进程不被换出

有的,mlock 系列系统调用。 earlyoom 就用了,保证自己不被换出。

从之前使用Windows的经验来看,系统很少因为内存不够出现系统卡死的状况

windows 不支持 overcommit,linux 则支持。这样 windows 分配内存比较保守,相对不容易出现此问题(但也会出问题,我也遇到过,任务管理器也出不来,只好重启)。但 linux 不适合关闭 overcommit(尽管是可以的),因为大量的 linux 程序是按照可以 overcommit 的假设编写的,关闭 overcommit 的结果是你必须浪费很大一部分物理内存。

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 12:46:10 | 显示全部楼层
debuggerx 发表于 2017-6-29 12:10
公司开发机原本8g内存,只开as开发安卓+几十个chrome页面也没问题;
后来连着把后台代码也写了,同时开as和 ...

如果是必须同时运行那就没办法了,不过像浏览器的话我可以接受它被杀掉,反正重新打开时会自动恢复tab。
移动浏览器遇到内存不足时会自动卸载后台tab的,切换过去时又重新加载,桌面浏览器如果借鉴一下就好了。

1

主题

163

帖子

458

积分

-r--r--r--

Rank: 3Rank: 3

积分
458
wtz 发表于 2017-6-29 13:31:01 | 显示全部楼层
duanyao 发表于 2017-6-29 10:34
这个帖子很老了,讨论的问题和解决方案并不超出我的认知范围。我关注这个问题也有好几年了,查阅了很多资 ...

明白。

其实这里我想说明的是,在处理内存不足的问题上,开发者和普通用户之间对“内存”的理解差异是造成OOM Killer不能“如期”工作的原因。
开发者眼中:“内存不足”是指进程请求分配更多内存时,(逻辑上)没有更多可供分配的内存;
普通用户眼中:“内存不足”是指(物理)内存用量超过一定限额,导致界面交互出现迟缓。
而在这当中,怎样界定“可供分配的内存”、“内存用量”和“界面交互进程与系统核心进程”,又因操作系统所处场景的不同而不同。

因此,个人认为,对于一个大众化发行版的桌面版本而言,有必要认真考虑以上问题,并根据用户反馈主动调整系统资源的管理策略。

34

主题

666

帖子

3273

积分

-rw-rw-rw-

Rank: 6Rank: 6

积分
3273
liulangdedao 志愿者 发表于 2017-6-29 13:34:04 | 显示全部楼层
个人应用的问题了吧,我曾经2g的内存,需要上网的时候,只单开 一个浏览器,标签页保持在三四个,照样愉快的上网,后来加了 一个4g的内存,变成了6g内存,系统顿时流畅了许多,可是没有多久,系统竟然卡死了,后来琢磨了一下,哪一次,我的谷歌开了将近二十个标签页,开着QQ,听着网易云音乐,开着虚拟机……系统不卡死才怪,系统运行的软件,保持一个合理的数目才是王道,否则就算加到32g,你 硬要开一堆程序,照样的卡死!

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 13:46:45 | 显示全部楼层
wtz 发表于 2017-6-29 13:31
明白。

其实这里我想说明的是,在处理内存不足的问题上,开发者和普通用户之间对“内存”的理解差异是造 ...

对的。但更准确地说,是操作系统内核没有足够的知识去有效管理用户态程序的内存,很多事情还是要移到用户态来做,甚至移到桌面环境上来做。比如,通知应用保存状态,因为即将杀死应用;让窗口不在前台的应用优先被杀死,等等。

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 13:49:12 | 显示全部楼层
liulangdedao 发表于 2017-6-29 13:34
个人应用的问题了吧,我曾经2g的内存,需要上网的时候,只单开 一个浏览器,标签页保持在三四个,照样愉快 ...

希望你能有耐心爬一下楼,如果没有,对比一下别的操作系统,有比较才有鉴别。Android 和 iOS 绝不会因为“ 硬要开一堆程序”而卡死,Windows 也比较少。

8

主题

389

帖子

1273

积分

-rw-r--r--

Rank: 4

积分
1273
QQ
jdocker 发表于 2017-6-29 17:41:58 来自移动端 | 显示全部楼层
我决定装个试试,已经死过两三次了,打开虚拟机和几个开发工具就卡死,已经8g内存了

点评

可以用 46 楼的程序验证一下效果  发表于 2017-6-30 21:32

34

主题

666

帖子

3273

积分

-rw-rw-rw-

Rank: 6Rank: 6

积分
3273
liulangdedao 志愿者 发表于 2017-6-29 22:03:42 | 显示全部楼层
duanyao 发表于 2017-6-29 13:49
希望你能有耐心爬一下楼,如果没有,对比一下别的操作系统,有比较才有鉴别。Android 和 iOS 绝不会因为 ...

ios没有用过不知道,但是我的安卓手机,确实是开多了软件就要卡死,用的机子比较老,红米1.如今使用的时候,很少打开超过三个程序。至于windows,开多了他会有个提示框,提示你关闭一些程序,

7

主题

406

帖子

1047

积分

-rw-r--r--

Rank: 4

积分
1047
duanyao 发表于 2017-6-29 23:22:45 | 显示全部楼层
liulangdedao 发表于 2017-6-29 22:03
ios没有用过不知道,但是我的安卓手机,确实是开多了软件就要卡死,用的机子比较老,红米1.如今使用的时 ...

我想你的手机不会比我的差:充话费送的 TCL P331M,只有512M内存。即使这样,用了2年也从未出现卡死,而且我也几乎不用任务管理器杀掉应用。当然经常出现的情况是后台应用突然就被系统杀掉了,比如前台用着微信,后台的音乐播放器忽然就没声了。我的另一台中兴U956手机出现过卡死,但与内存不足无关,只在硬解码播放某些视频时出现,可能是底层故障。我想你需要更多分析才能确定卡死的真正原因,如果确实是开多了软件就要卡死,那么我想小米的系统存在严重缺陷。

Windows 的情况我前面也说了,比 Linux 不容易卡死,但也不能完全避免。

2

主题

122

帖子

390

积分

-r--r-----

Rank: 2

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

呵呵,我8g日常爆炸

47

主题

1228

帖子

4377

积分

-rw-rw-rw-

Rank: 6Rank: 6

积分
4377
QQ
kirigaya 发表于 2017-6-30 08:51:05 | 显示全部楼层
q1377195627 发表于 2017-6-30 00:14
呵呵,我8g日常爆炸

可能是因为我用的ssd吧,而且6G从来没用到超过4G上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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