有关OOM killer和磁盘缓存的问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

有关OOM killer和磁盘缓存的问题

#1

帖子 wtz » 2016-03-21 14:24

本人内存较小(1.5G),且不用swap分区。有时候不小心程序开多了会导致硬盘狂转,鼠标、键盘完全失去响应,连杀进程的机会都没有(不考虑使用SysRq,因为有时候正在编辑文档)。

比如,用kwrite打开一个非常大的文本文件,通过htop监控可以发现内存用量升至1.35G左右后硬盘灯就开始常亮(之前是闪亮)。理论上OOM killer应该能在此时结束内存用量较大的进程,但是此时似乎没有发挥作用(可用于操作的资源不足?)。 同时,发现内存用量升高伴随磁盘缓存区降低,降到一定程度就导致I/O压力急剧增加(似乎与换页操作有关?)。

查了一些内核vm的参数(oom_kill_allocating_task、dirty_background_ratio、min_free_kbytes 等)并尝试修改,但效果不明显。

个人觉得可能需要从两方面入手:提高 OOM killer 的执行效率、设置磁盘缓存的最小值。

请各路高人予以指点,谢谢!


附上软/硬件参数:
CPU:Core 双核 1.6 G
内存:1.5 G,DDR2
硬盘:5400rpm,SATA1.0
【短期内不会考虑升级硬件】
内核:4.4
桌面:KDE
onlylove
论坛版主
帖子: 5230
注册时间: 2007-01-14 16:23

Re: 有关OOM killer和磁盘缓存的问题

#2

帖子 onlylove » 2016-03-21 14:51

你为啥不设swap呢
#include <stdio.h>
void main()
{
double world;
unsigned letter;
short stay;
long memories;
printf("I miss you.\n");
}
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

Re: 有关OOM killer和磁盘缓存的问题

#3

帖子 wtz » 2016-03-21 18:03

onlylove 写了:你为啥不设swap呢
之前是设了swap的(1GB),但是因为硬盘读写速度很慢,当内存用量超过1.5 G后如果执行了大量I/O操作(比如用kwrite开一个很大的文件)机器仍然会卡死,所以干脆就取消了,省得消耗硬盘寿命……
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: 有关OOM killer和磁盘缓存的问题

#4

帖子 poloshiao » 2016-03-21 19:07

省得消耗硬盘寿命
其實 多慮了
硬盤生命力 比你想像中 耐久許多
因為 swap 而把硬盤操壞的案例 很少見
反而是 系統檔案 / 資料檔案 建議要備存
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

Re: 有关OOM killer和磁盘缓存的问题

#5

帖子 wtz » 2016-03-21 19:55

寿命确实不是大问题。关键是,有没有swap都会卡,而且加了swap之后OOM时响应速度更慢。

我所疑惑的是,为什么同样的硬件,同样是OOM,Windows能及时结束占用内存过多的进程(而且用不用pagefile.sys影响不大),而Linux非常困难。

据说Android除了OOM监控外,还有一套Lowmem监控,不知道能不能拿来用在其他发行版上。
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

Re: 有关OOM killer和磁盘缓存的问题

#6

帖子 wtz » 2016-03-25 10:09

沉了 :Sad
难道只能从代码层面进行修改吗?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 有关OOM killer和磁盘缓存的问题

#7

帖子 科学之子 » 2016-03-31 4:53

1.1:这么小内存,推荐用ZRAM或ZSWAP
1.2:swappiness值设置为100(除了腾出空间给文件缓存,这个数值在我的环境下实测也是最流畅的)
1.3:如果使用了ZRAM就不要再分配任何速度低于ZRAM的设备作为交换空间,否则应该使用ZSWAP代替ZRAM
2.1:单纯从内存角度看,在没有交换空间的情况下确实不应该卡,最多就是结束掉某些进程(结束算法我不太了解)
2.2:个人猜测可能是内存即将耗尽,但没有触发OOM,导致文件缓存机制的可用内存极少,因此出现了硬盘狂转的现象
3:如果设置了交换空间,打开很多程序之后出现硬盘狂转但无OOM发生,这是正常现象,因为交换空间的作用就是保证系统不会因为内存不足崩溃.(不知是否正确?)
4.1:如果愿意的话,可以试试看换Debian+LXDE,它相比Ubuntu有更高的可定制性,Bug也少(有些Bug会导致卡慢),会更加流畅.
4.2:LXDE是一个非常轻量且易用的桌面环境,默认界面风格类似WinXP.
上次由 科学之子 在 2016-03-31 17:18,总共编辑 2 次。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 有关OOM killer和磁盘缓存的问题

#8

帖子 科学之子 » 2016-03-31 6:02

wtz 写了:寿命确实不是大问题。关键是,有没有swap都会卡,而且加了swap之后OOM时响应速度更慢。

我所疑惑的是,为什么同样的硬件,同样是OOM,Windows能及时结束占用内存过多的进程(而且用不用pagefile.sys影响不大),而Linux非常困难。

据说Android除了OOM监控外,还有一套Lowmem监控,不知道能不能拿来用在其他发行版上。
同样是OOM,Windows能及时结束占用内存过多的进程(而且用不用pagefile.sys影响不大)
Windows也有OOM了?
根据我的常识如果不开swap,不应该卡,最多只是OOM
卡的话,很可能就是文件缓存空间太低,硬盘速度又太慢
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 有关OOM killer和磁盘缓存的问题

#9

帖子 科学之子 » 2016-04-02 1:50

1.3:如果使用了ZRAM就不要再分配任何速度低于ZRAM的设备作为交换空间,否则应该使用ZSWAP代替ZRAM
这仅仅是理论推测,实际效果楼主可以亲自测试看看
推测理由就是ZRAM占满之后就只能使用低速交换设备
更晚换出的页面往往是更热的,这就造成了zram已满时无法存放新的更热页面,更热的页面只能换出到低速设备上.
而被占满的高速ZRAM则继续存放着老页面

swappiness=100这个最佳值也是我这里实测的结果.
swappiness的测试讨论贴:viewtopic.php?f=122&t=476483
在进行这个测试以前,我一直以为swappiness=1是最流畅的(新内核如果swappiness为0则可能发生OOM).
测试环境是单纯使用zram作为交换设备,如果是普通的交换分区或zswap,就不敢妄言了.
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

Re: 有关OOM killer和磁盘缓存的问题

#10

帖子 wtz » 2016-04-02 13:30

科学之子 写了:1.1:这么小内存,推荐用ZRAM或ZSWAP
1.2:swappiness值设置为100(除了腾出空间给文件缓存,这个数值在我的环境下实测也是最流畅的)
1.3:如果使用了ZRAM就不要再分配任何速度低于ZRAM的设备作为交换空间,否则应该使用ZSWAP代替ZRAM
2.1:单纯从内存角度看,在没有交换空间的情况下确实不应该卡,最多就是结束掉某些进程(结束算法我不太了解)
2.2:个人猜测可能是内存即将耗尽,但没有触发OOM,导致文件缓存机制的可用内存极少,因此出现了硬盘狂转的现象
3:如果设置了交换空间,打开很多程序之后出现硬盘狂转但无OOM发生,这是正常现象,因为交换空间的作用就是保证系统不会因为内存不足崩溃.(不知是否正确?)
4.1:如果愿意的话,可以试试看换Debian+LXDE,它相比Ubuntu有更高的可定制性,Bug也少(有些Bug会导致卡慢),会更加流畅.
4.2:LXDE是一个非常轻量且易用的桌面环境,默认界面风格类似WinXP.
谢谢您的用心回复。

我设了一个512M的zram作为交换分区,然后又把swappiness改为100,系统终于可以自行kill内存超额的进程了(虽然要等待一分钟左右)。

另外,我之前也尝试过LXDE,但总觉得没有KDE高大上 :em06

其实桌面占用资源多一些也没什么,只要系统在内存超额的时候能更果断地做出决策就好~个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 有关OOM killer和磁盘缓存的问题

#11

帖子 科学之子 » 2016-04-02 21:38

wtz 写了:
科学之子 写了:1.1:这么小内存,推荐用ZRAM或ZSWAP
1.2:swappiness值设置为100(除了腾出空间给文件缓存,这个数值在我的环境下实测也是最流畅的)
1.3:如果使用了ZRAM就不要再分配任何速度低于ZRAM的设备作为交换空间,否则应该使用ZSWAP代替ZRAM
2.1:单纯从内存角度看,在没有交换空间的情况下确实不应该卡,最多就是结束掉某些进程(结束算法我不太了解)
2.2:个人猜测可能是内存即将耗尽,但没有触发OOM,导致文件缓存机制的可用内存极少,因此出现了硬盘狂转的现象
3:如果设置了交换空间,打开很多程序之后出现硬盘狂转但无OOM发生,这是正常现象,因为交换空间的作用就是保证系统不会因为内存不足崩溃.(不知是否正确?)
4.1:如果愿意的话,可以试试看换Debian+LXDE,它相比Ubuntu有更高的可定制性,Bug也少(有些Bug会导致卡慢),会更加流畅.
4.2:LXDE是一个非常轻量且易用的桌面环境,默认界面风格类似WinXP.
谢谢您的用心回复。

我设了一个512M的zram作为交换分区,然后又把swappiness改为100,系统终于可以自行kill内存超额的进程了(虽然要等待一分钟左右)。

另外,我之前也尝试过LXDE,但总觉得没有KDE高大上 :em06

其实桌面占用资源多一些也没什么,只要系统在内存超额的时候能更果断地做出决策就好~个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了。
说实话,我非常不理解为何在无swap的情况下OOM速度会慢,是不是根本就没有发生OOM?
系统卡只是因为桌面环境的相关组件IO负荷过高,磁盘缓存又太小
个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了
内存本来是用来运行程序指令的,而非作为磁盘缓存,如果本末倒置的话速度会更慢.
为什么设置为512M?怕OOM吗?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 有关OOM killer和磁盘缓存的问题

#13

帖子 科学之子 » 2016-04-03 14:56

sudo -i
echo 1>/proc/sys/vm/laptop_mode
以上简单方法试试看,可以这个本来是给笔记本用的,原理是减少硬盘访问来提高电池的续航能力.
不知道这个是否会减少硬盘IO从而提高响应速度.


更复杂的:viewtopic.php?p=3155601#p3155601
但很多都是理论推测,能否实际运用我也不清楚
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 有关OOM killer和磁盘缓存的问题

#14

帖子 rosynirvana » 2016-04-03 15:09

1.5GB的RAM不适合当前的linux desktop,很可能不是改参数能解决的
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 有关OOM killer和磁盘缓存的问题

#15

帖子 rosynirvana » 2016-04-03 15:16

科学之子 写了: Windows也有OOM了?
根据我的常识如果不开swap,不应该卡,最多只是OOM
卡的话,很可能就是文件缓存空间太低,硬盘速度又太慢
这真的只是你的猜测了
没有swap分区或文件很容易被kswapd0卡死的,google有个搜索提示是"kswapd0 cpu 100"
回复