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

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

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

#46

帖子 科学之子 » 2016-05-20 18:58

wtz 写了:
rosynirvana 写了:
wtz 写了: 这个就是(多数)Windows用户和(多数)Linux用户的观念差别了。惹了麻烦,一个怨机器,一个自认倒霉。

直接kill确实不太合适,但也不能无止尽地允许任何内存分配请求。所以在分配内存的算法上还需要进一步提高。

磁盘缓存还是应当保留一部分供系统关键进程进行应急响应,所以有必要在内核参数中增加一个最小值选项。
首先我没看出这为什么是自认倒霉,之前我也没见过哪个windows用户认为,没内存的时候系统应该把自己主要工作进程杀掉,让自己丢数据

然后下面两句话有多少是你猜的?
允许任何内存分配,也就是vm.overcommit_memory = 1,我确实不知道哪个发行版默认用这个,只有用作特殊用途的机器会这么设置
Linux当然会预留一部分内存用于基本维护,另外也会预留一部分内存让用户控件申请内存时能够迅速处理
我承认我没有研究过内核的代码,但是这不代表我所说的都是”猜测“,没有根据。
我是站在用户体验的角度,而不是技术的角度来看OOM这个问题。多数Windows用户才不会管系统是如何分配内存的,他们只知道系统应当正确地处理正在运行的程序,不能随意停止响应。至于这背后到底是OOM还是overcommit的算法在发挥作用,他们不关心。但这恰恰是影响用户使用感受的重要方面。

所以说,没有站在用户(这里主要指初学者)的角度考虑问题,这是很多Linux发行版不被广泛认可的主要原因。

另外,类似”Linux不是小白玩的系统“这样的论调,也间接助长了社区在改善Linux用户体验方面的惰性。
社区如果愿意改善用户体验,当然是皆大欢喜
Linux之类是自由软件,严格来说自由软件的开发者就是其用户,本质上就是在"自娱自乐"
商业软件是为了赚钱而生和存在,赚钱的方式就是讨好用户
自由软件是为开发者自己而生和存在
系统停止响应,并非真正停止,只是要等很长时间
我十分不理解为什么您要希望OOM?
例如自己想打开一个程序,系统虽然没有变慢,但被打开的程序被立刻OOM
这种系统还有何意义?
变慢的话,好歹还能凑合着用,被OOM的话就是连使用的可能性都没有了.
上次由 科学之子 在 2016-05-20 19:09,总共编辑 1 次。
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

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

#47

帖子 rosynirvana » 2016-05-20 19:06

科学之子 写了:
rosynirvana 写了:
科学之子 写了:
rosynirvana 写了:怎么还是想不开
主要工作进程被系统kill了岂不是丢数据?为什么还会希望它发生?
求教为什么我升级为4.5就很快OOM?
LXDE环境,内核限制为224M内存,开启200%的zram,iceweasel开个天气预报网页就OOM
3.16就没有发生这类现象,最多只是系统很卡,但没有死机.
可能性太多了
例如memmap设置的内存地址冲突了之类的

mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory
Amount of memory to be used when the kernel is not able
to see the whole system memory or for test.
[X86] Work as limiting max address. Use together
with memmap= to avoid physical address space collisions.
Without memmap= PCI devices could be placed at addresses
belonging to unused RAM.
thank~!
把memmap参数去掉,就不会OOM了
不过,为何会冲突呢?3.16就算不去掉memmap参数也正常.
可能性还是太多,例如看看启动时候的syslog里面内存是怎么map的,内核改了后有没有变化这类
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

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

#48

帖子 rosynirvana » 2016-05-20 19:38

wtz 写了:
rosynirvana 写了:
wtz 写了: 这个就是(多数)Windows用户和(多数)Linux用户的观念差别了。惹了麻烦,一个怨机器,一个自认倒霉。

直接kill确实不太合适,但也不能无止尽地允许任何内存分配请求。所以在分配内存的算法上还需要进一步提高。

磁盘缓存还是应当保留一部分供系统关键进程进行应急响应,所以有必要在内核参数中增加一个最小值选项。
首先我没看出这为什么是自认倒霉,之前我也没见过哪个windows用户认为,没内存的时候系统应该把自己主要工作进程杀掉,让自己丢数据

然后下面两句话有多少是你猜的?
允许任何内存分配,也就是vm.overcommit_memory = 1,我确实不知道哪个发行版默认用这个,只有用作特殊用途的机器会这么设置
Linux当然会预留一部分内存用于基本维护,另外也会预留一部分内存让用户控件申请内存时能够迅速处理
我承认我没有研究过内核的代码,但是这不代表我所说的都是”猜测“,没有根据。
我是站在用户体验的角度,而不是技术的角度来看OOM这个问题。多数Windows用户才不会管系统是如何分配内存的,他们只知道系统应当正确地处理正在运行的程序,不能随意停止响应。至于这背后到底是OOM还是overcommit的算法在发挥作用,他们不关心。但这恰恰是影响用户使用感受的重要方面。

所以说,没有站在用户(这里主要指初学者)的角度考虑问题,这是很多Linux发行版不被广泛认可的主要原因。

另外,类似”Linux不是小白玩的系统“这样的论调,也间接助长了社区在改善Linux用户体验方面的惰性。
您在说桌面用户如何如何的时候,社区里的人回复的也是桌面用户如何如何,比如加内存和换耗内存比较小的DE
您在试图发表对内核的看法的时候,社区的人回复的才是所谓技术,比如内核的预留内存

问题实际上是您提出了一个极少有人提出提出的需求,即内存不够用的时候,kernel直接kill占RAM最大的进程来保持交互线程不卡
我也时不时会用windows,接触的人也多是windows用户,其中没人觉得应该在内存压力过大时直接终止一个进程。内存不够时,一般人的做法是少开几个进程,或者去买内存条。

所以您用这个理由指责linux kernel(或distro)侧重于技术而非用户体验,在我看来是难以成立的

另外,“很多”Linux Distro不被广泛认可的主要原因是它们本身就是hobby project,而不是想被广泛认可的操作系统。
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

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

#49

帖子 wtz » 2016-05-21 17:59

科学之子 写了:[
社区如果愿意改善用户体验,当然是皆大欢喜
Linux之类是自由软件,严格来说自由软件的开发者就是其用户,本质上就是在"自娱自乐"
商业软件是为了赚钱而生和存在,赚钱的方式就是讨好用户
自由软件是为开发者自己而生和存在
系统停止响应,并非真正停止,只是要等很长时间
我十分不理解为什么您要希望OOM?
例如自己想打开一个程序,系统虽然没有变慢,但被打开的程序被立刻OOM
这种系统还有何意义?
变慢的话,好歹还能凑合着用,被OOM的话就是连使用的可能性都没有了.
感觉这个问题已经扯得有点远了。关于用户体验的问题,还是另开贴讨论吧。

回到这个问题本身上来。我的目的不是任何时候都触发OOM,而是在异常的情况下(也就是我一开始就提到的:不小心手抽,点开了一个非常大的文本文件,而kwrite默认情况下会把所有内容都载入内存)系统需要发挥“守夜人”的角色,及时发现异常的进程并kill它。

可能多数Linux用户认为“正确管理内存是应用程序设计者的问题”,但问题在于:程序总有bug,而多数自由软件的稳定性与新颖性(就是功能的丰富程度,或者简单理解为版本高低)总是存在矛盾,这时就不能完全依赖应用程序自身的可靠性,而必须同时重视系统(内核)在“维稳”方面的作用。

至于正常情况下,一般用户对自己的电脑最多能运行多少程序,什么情况下会卡,基本是有数的。所以并不是任何情况下都需要动用OOM。

另外,自由软件“是为开发者自己而生和存在”,这没错。但自由软件运动是全人类的运动,为了从商业软件的地盘赢得更多用户,还是应该多为用户考虑,“积极争取一切可能争取的力量”。如果我没有记错, Mark Shuttleworth 在 2012 提出了占领全世界PC市场5%的目标,大家想想,全世界使用电脑的人中程序员占多少?geek又有多少?

技术论坛当然以讨论技术为主,但是我也希望大家能够跳出“技术”的框框,以“局外人”的眼光谈一谈Ubuntu,谈一谈自由软件的发展问题,这样才会看得更全面。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

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

#50

帖子 科学之子 » 2016-05-22 6:17

wtz 写了:
科学之子 写了:[
社区如果愿意改善用户体验,当然是皆大欢喜
Linux之类是自由软件,严格来说自由软件的开发者就是其用户,本质上就是在"自娱自乐"
商业软件是为了赚钱而生和存在,赚钱的方式就是讨好用户
自由软件是为开发者自己而生和存在
系统停止响应,并非真正停止,只是要等很长时间
我十分不理解为什么您要希望OOM?
例如自己想打开一个程序,系统虽然没有变慢,但被打开的程序被立刻OOM
这种系统还有何意义?
变慢的话,好歹还能凑合着用,被OOM的话就是连使用的可能性都没有了.
感觉这个问题已经扯得有点远了。关于用户体验的问题,还是另开贴讨论吧。

回到这个问题本身上来。我的目的不是任何时候都触发OOM,而是在异常的情况下(也就是我一开始就提到的:不小心手抽,点开了一个非常大的文本文件,而kwrite默认情况下会把所有内容都载入内存)系统需要发挥“守夜人”的角色,及时发现异常的进程并kill它。

可能多数Linux用户认为“正确管理内存是应用程序设计者的问题”,但问题在于:程序总有bug,而多数自由软件的稳定性与新颖性(就是功能的丰富程度,或者简单理解为版本高低)总是存在矛盾,这时就不能完全依赖应用程序自身的可靠性,而必须同时重视系统(内核)在“维稳”方面的作用。

至于正常情况下,一般用户对自己的电脑最多能运行多少程序,什么情况下会卡,基本是有数的。所以并不是任何情况下都需要动用OOM。

另外,自由软件“是为开发者自己而生和存在”,这没错。但自由软件运动是全人类的运动,为了从商业软件的地盘赢得更多用户,还是应该多为用户考虑,“积极争取一切可能争取的力量”。如果我没有记错, Mark Shuttleworth 在 2012 提出了占领全世界PC市场5%的目标,大家想想,全世界使用电脑的人中程序员占多少?geek又有多少?

技术论坛当然以讨论技术为主,但是我也希望大家能够跳出“技术”的框框,以“局外人”的眼光谈一谈Ubuntu,谈一谈自由软件的发展问题,这样才会看得更全面。
异常的情况下(也就是我一开始就提到的:不小心手抽,点开了一个非常大的文本文件,而kwrite默认情况下会把所有内容都载入内存)系统需要发挥“守夜人”的角色,及时发现异常的进程并kill它。
要是您没有手抽,而是哪怕很卡也需要打开这个大文件,也OOM,那合适吗?
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

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

#51

帖子 wtz » 2016-05-22 10:20

科学之子 写了:
异常的情况下(也就是我一开始就提到的:不小心手抽,点开了一个非常大的文本文件,而kwrite默认情况下会把所有内容都载入内存)系统需要发挥“守夜人”的角色,及时发现异常的进程并kill它。
要是您没有手抽,而是哪怕很卡也需要打开这个大文件,也OOM,那合适吗?
那就要看用户知不知道自己在做什么了。
前面我提到,多数用户对于自己的电脑能承担的任务量是心里有数的,所以更多情况下这种操作不是“有意”的,而是“无意”的。因此系统需要积极做出保护性的反应。
当然,不同的Linux用户对此理解不同。对于Ubuntu(或者进一步,UbuntuKylin)这样面向普通用户的发行版,个人更倾向于“多为用户做事”(或者说的难听一点,更“无脑”一些)。这也是我没有在内核的Bugzilla或者Debian社区提这个问题的原因。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

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

#52

帖子 科学之子 » 2016-05-22 22:17

wtz 写了:
科学之子 写了:
异常的情况下(也就是我一开始就提到的:不小心手抽,点开了一个非常大的文本文件,而kwrite默认情况下会把所有内容都载入内存)系统需要发挥“守夜人”的角色,及时发现异常的进程并kill它。
要是您没有手抽,而是哪怕很卡也需要打开这个大文件,也OOM,那合适吗?
那就要看用户知不知道自己在做什么了。
前面我提到,多数用户对于自己的电脑能承担的任务量是心里有数的,所以更多情况下这种操作不是“有意”的,而是“无意”的。因此系统需要积极做出保护性的反应。
当然,不同的Linux用户对此理解不同。对于Ubuntu(或者进一步,UbuntuKylin)这样面向普通用户的发行版,个人更倾向于“多为用户做事”(或者说的难听一点,更“无脑”一些)。这也是我没有在内核的Bugzilla或者Debian社区提这个问题的原因。
是什么样的大文件?会有数百MB甚至1G多?
我个人的解决思路有3个
1.避免错误点击,比如放到适当的目录中
2.想办法简化(避免GUI之类的复杂资源占用)结束进程的操作,例如写一个自动结束内存最多进程的shell脚本,然后绑定到wm快捷键,一旦需要结束就立即按相应热键
3.使用类似LXC之类的机制去限制资源占用,避免死机之类的严重情况发生.
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

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

#53

帖子 wtz » 2016-05-23 21:36

科学之子 写了: 是什么样的大文件?会有数百MB甚至1G多?
我个人的解决思路有3个
1.避免错误点击,比如放到适当的目录中
2.想办法简化(避免GUI之类的复杂资源占用)结束进程的操作,例如写一个自动结束内存最多进程的shell脚本,然后绑定到wm快捷键,一旦需要结束就立即按相应热键
3.使用类似LXC之类的机制去限制资源占用,避免死机之类的严重情况发生.
感谢您的建议。
这个文件是从NCBI下载的数据库,一般我也不会用kwrite取打开,最多用head或tail看看有多少记录。

您的第二个建议非常好。我就顺便写了一个脚本,贴出来分享一下:

kill_mem_spendthrift.sh

代码: 全选

#!/bin/bash
# Automatically kill the process that holds most resident memory

taskList=$(top -b -n 1 -o %MEM | head)

headLine=$(echo "$taskList" | grep -n 'PID')
lineno=${headLine%%:*}

firstLine=$(echo "$taskList" | grep -n ^ | grep $[lineno + 1]:)
firstLine=${firstLine#*:}

for str in $firstLine; do
    kill $str
    break
done
至于LXC,个人还不太熟悉。不知道低配置的机器上能否适用?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

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

#54

帖子 科学之子 » 2016-05-24 4:55

wtz 写了:
科学之子 写了: 是什么样的大文件?会有数百MB甚至1G多?
我个人的解决思路有3个
1.避免错误点击,比如放到适当的目录中
2.想办法简化(避免GUI之类的复杂资源占用)结束进程的操作,例如写一个自动结束内存最多进程的shell脚本,然后绑定到wm快捷键,一旦需要结束就立即按相应热键
3.使用类似LXC之类的机制去限制资源占用,避免死机之类的严重情况发生.
感谢您的建议。
这个文件是从NCBI下载的数据库,一般我也不会用kwrite取打开,最多用head或tail看看有多少记录。

您的第二个建议非常好。我就顺便写了一个脚本,贴出来分享一下:

kill_mem_spendthrift.sh

代码: 全选

#!/bin/bash
# Automatically kill the process that holds most resident memory

taskList=$(top -b -n 1 -o %MEM | head)

headLine=$(echo "$taskList" | grep -n 'PID')
lineno=${headLine%%:*}

firstLine=$(echo "$taskList" | grep -n ^ | grep $[lineno + 1]:)
firstLine=${firstLine#*:}

for str in $firstLine; do
    kill $str
    break
done
至于LXC,个人还不太熟悉。不知道低配置的机器上能否适用?
LXC是一种"容器",我也不太了解,看介绍类似"沙盒"之类的机制
可以限制"容器"内程序的资源使用
从介绍来看,猜测低配电脑也应该可以无障碍使用
参考链接:
http://baike.baidu.com/view/6572152.htm
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

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

#55

帖子 科学之子 » 2016-09-13 19:49

偶然发现打开Firefox这个网页经常会被OOM:
http://www.weather.com.cn/live/
但换成了老旧的3.16内核就没问题了
虽然特性少一些(比如zram不能compact),但还是体验最好的
故再次向楼主安利3.16内核
也就是Debian jessie
不过Debian未来的新版本的内核是否也会像bpo包那样"出现问题"(不确定这是Bug还是新内核的设计思路调整),我就不清楚了
楼主不愿用Debian的话可以自己折腾一下把Debian的那个内核包手动弄进Ubuntu里
wtz
帖子: 39
注册时间: 2015-06-27 23:08
系统: Ubuntu Kylin 16.04

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

#56

帖子 wtz » 2017-02-12 11:07

科学之子 写了:偶然发现打开Firefox这个网页经常会被OOM:
http://www.weather.com.cn/live/
但换成了老旧的3.16内核就没问题了
虽然特性少一些(比如zram不能compact),但还是体验最好的
故再次向楼主安利3.16内核
也就是Debian jessie
不过Debian未来的新版本的内核是否也会像bpo包那样"出现问题"(不确定这是Bug还是新内核的设计思路调整),我就不清楚了
楼主不愿用Debian的话可以自己折腾一下把Debian的那个内核包手动弄进Ubuntu里
看来是3.x向4.x过渡的时候整出来的问题。也难怪3.16系列在官方维护列表中的EOL最晚了。
我目前已经换电脑了,所以也就懒得折腾旧机器了。有空我来看看Ubuntu官方的low-latency内核在I/O方面表现是不是好一些。
回复