分页: 1 / 4
有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-21 14:24
由 wtz
本人内存较小(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
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-21 14:51
由 onlylove
你为啥不设swap呢
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-21 18:03
由 wtz
onlylove 写了:你为啥不设swap呢
之前是设了swap的(1GB),但是因为硬盘读写速度很慢,当内存用量超过1.5 G后如果执行了大量I/O操作(比如用kwrite开一个很大的文件)机器仍然会卡死,所以干脆就取消了,省得消耗硬盘寿命……
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-21 19:07
由 poloshiao
省得消耗硬盘寿命
其實 多慮了
硬盤生命力 比你想像中 耐久許多
因為 swap 而把硬盤操壞的案例 很少見
反而是 系統檔案 / 資料檔案 建議要備存
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-21 19:55
由 wtz
寿命确实不是大问题。关键是,有没有swap都会卡,而且加了swap之后OOM时响应速度更慢。
我所疑惑的是,为什么同样的硬件,同样是OOM,Windows能及时结束占用内存过多的进程(而且用不用pagefile.sys影响不大),而Linux非常困难。
据说Android除了OOM监控外,还有一套Lowmem监控,不知道能不能拿来用在其他发行版上。
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-03-25 10:09
由 wtz
沉了
难道只能从代码层面进行修改吗?
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 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.
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 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
卡的话,很可能就是文件缓存空间太低,硬盘速度又太慢
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 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,就不敢妄言了.
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-04-02 13:30
由 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高大上
其实桌面占用资源多一些也没什么,只要系统在内存超额的时候能更果断地做出决策就好~个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了。
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 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高大上
其实桌面占用资源多一些也没什么,只要系统在内存超额的时候能更果断地做出决策就好~个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了。
说实话,我非常不理解为何在无swap的情况下OOM速度会慢,是不是根本就没有发生OOM?
系统卡只是因为桌面环境的相关组件IO负荷过高,磁盘缓存又太小
个人感觉内核最好能设置文件缓存区的最低大小,这样对老机器可能就更友好了
内存本来是用来运行程序指令的,而非作为磁盘缓存,如果本末倒置的话速度会更慢.
为什么设置为512M?怕OOM吗?
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-04-02 23:46
由 科学之子
还有,推荐个shell脚本给楼主参考:
viewtopic.php?f=21&t=476869
最好设置多个zram作为交换设备,数量与CPU(核心)数量相同.
这样有利于发挥多核的并行优势.
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-04-03 14:56
由 科学之子
sudo -i
echo 1>/proc/sys/vm/laptop_mode
以上简单方法试试看,可以这个本来是给笔记本用的,原理是减少硬盘访问来提高电池的续航能力.
不知道这个是否会减少硬盘IO从而提高响应速度.
更复杂的:
viewtopic.php?p=3155601#p3155601
但很多都是理论推测,能否实际运用我也不清楚
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-04-03 15:09
由 rosynirvana
1.5GB的RAM不适合当前的linux desktop,很可能不是改参数能解决的
Re: 有关OOM killer和磁盘缓存的问题
发表于 : 2016-04-03 15:16
由 rosynirvana
科学之子 写了:
Windows也有OOM了?
根据我的常识如果不开swap,不应该卡,最多只是OOM
卡的话,很可能就是文件缓存空间太低,硬盘速度又太慢
这真的只是你的猜测了
没有swap分区或文件很容易被kswapd0卡死的,google有个搜索提示是"kswapd0 cpu 100"