raphaelzhang
2017-06-29 19:59 deepin
本帖最后由 raphaelzhang 于 2017-6-29 12:00 编辑
不过我觉得earlyoom作为一个可选项倒是可以装的,但是不要缺省装,不然用户估计又要抱怨了
不过我觉得earlyoom作为一个可选项倒是可以装的,但是不要缺省装,不然用户估计又要抱怨了
Reply Like 0 View the author
https://bbs.deepin.org/post/141744
刚才讨论了 这个方案可能谁kill其他的应用 导致数据丢失,已经有大神在解决了 ...
https://bbs.deepin.org/post/141744
tty -> top -> kill还好吧,我自己遇到系统延迟时都可以解决,有时候确实有点慢,但几分钟还没有遇到过。 ...
https://bbs.deepin.org/post/141744
不过我觉得earlyoom作为一个可选项倒是可以装的,但是不要缺省装,不然用户估计又要抱怨了 ...
https://bbs.deepin.org/post/141744
可能因为Linux长期是作为服务器存在的 感觉这个问题一直没被重视
我之前也调查过这个问题 但是没来得及验证 ...
1. 如果确定是持续页面交换导致的 那么减小甚至关闭swap分区是否会有帮助
2. cgroup提供的rss限制是否能够有效遏制这个问题
3. 磁盘读写优先级能否保证某些程序优先相应
4. 是否有类似非换页内存的概念,保证系统关键进程不被换出
从之前使用Windows的经验来看,系统很少因为内存不够出现系统卡死的状况
https://bbs.deepin.org/post/141744
公司开发机原本8g内存,只开as开发安卓+几十个chrome页面也没问题;
后来连着把后台代码也写了,同时开as和 ...
https://bbs.deepin.org/post/141744
这个帖子很老了,讨论的问题和解决方案并不超出我的认知范围。我关注这个问题也有好几年了,查阅了很多资 ...
https://bbs.deepin.org/post/141744
明白。
其实这里我想说明的是,在处理内存不足的问题上,开发者和普通用户之间对“内存”的理解差异是造 ...
https://bbs.deepin.org/post/141744
个人应用的问题了吧,我曾经2g的内存,需要上网的时候,只单开 一个浏览器,标签页保持在三四个,照样愉快 ...
https://bbs.deepin.org/post/141744
希望你能有耐心爬一下楼,如果没有,对比一下别的操作系统,有比较才有鉴别。Android 和 iOS 绝不会因为 ...
https://bbs.deepin.org/post/141744
ios没有用过不知道,但是我的安卓手机,确实是开多了软件就要卡死,用的机子比较老,红米1.如今使用的时 ...
https://bbs.deepin.org/post/141744
我觉得还是加钱升内存才是解决之道。自从加了2G内存,6G情况下就没卡过。
https://bbs.deepin.org/post/141744
呵呵,我8g日常爆炸
duanyao 发表于 2017-6-29 10:05
不知道你们的解决思路是什么,能否透露一二?
我觉得在现阶段,linux 桌面在内存耗尽的时候丢失数据是无 ...
https://bbs.deepin.org/post/141744
andriod的解决方案是所有应用都要遵守他的sdk,系统可以随时杀死进程,所以应用会主动保存数据,把保存数 ...
https://bbs.deepin.org/post/141744
可能是因为我用的ssd吧,而且6G从来没用到超过4G上。
网站: https://github.com/rfjakob/earlyoom
文档的解说已经很详细了,不过因为是英文,我简单介绍一下:
Linux 内核中的 oom-killer 严重不靠谱,往往触发得太迟。在它工作之前,系统往往已经没救了,或者用户已经被卡得失去耐心,按了重启键。
earlyoom 是个用户态服务,顾名思义它会较早的触发(默认条件是可用物理内存和交换分区都不足10%),杀掉内存消耗最多的进程,避免系统卡死。
我试了一下还是挺有效的,用 android-studio 编译一个大工程时,它先后杀掉了 chrome、 firefox、vs code,编译得以顺利完成。
建议 deepin 预装这个软件,我相信它能避免相当数量的卡死问题。
注:2017.9 deepin 已经收录了此软件,但没有预装,大家可以用 sudo apt install earlyoom 安装试用。安装后不必做什么,下次重启系统后自动生效。
注2:2019.7 deepin 15.9.2 - 15.11 稳定版仓库里没有此软件(预计v 20恢复),你可以装 debian 仓库里的: http://ftp.cn.debian.org/debian/pool/main/e/earlyoom/earlyoom_1.2-1_amd64.deb
补充:想了一下,还是把我这些年调查内存不足导致卡死的问题是做的笔记发上来。很凌乱,没什么条理,不过里面的很多链接应该是有参考价值的。
发上来的主要目的是说明:我并非是偶尔看到一个软件就兴冲冲的推荐了,这后面是有大量铺垫的。linux_memory_swap_thrashing.zip
linux_memory_swap_thrashing.zip
再补充:还没有经历过内存不足卡死,或者喜欢作死的小伙伴,可以试试这个小程序:
http://launchpadlibrarian.net/23372552/memory_overcommit.cc
来源是 ubuntu 的一个 bug 报告 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/159356
下载后用 c++ 编译,运行。你需要输入每次分配的内存大小,单位 M,直接回车表示与上次相同。
如果剩余物理内存很多可以500M每步,剩余500M左右时改为100M每步,剩余100M左右时改为30M每步,而且不要太快。这很重要,如果最后阶段步子太大、太快,很容易被OOM killer 迅速杀掉。
剩余物理内存用系统监视器或free看就行。
在我的机器(机械硬盘)上,如果关闭 earlyoom (systemctl stop earlyoom),它几乎 100% 能卡死。之前我用的测试方法(浏览器开很多页面、开虚拟机、android-studio)太繁琐了,还是这个好。
为了从卡死中恢复,可以这么做:在运行 memory_overcommit.cc 之前,先修改 /etc/sysctl.d/99-sysctl.conf (也可能是同一目录下的其它名字),把 kernel.sysrq=0 (或其它值)改为 kernel.sysrq=1 ;然后重启系统,或执行 sudo sysctl kernel.sysrq=1 立即生效。
在卡死后,按下组合键 alt + sysrq + r 然后按 alt + sysrq + f ,这是为了手工执行 oom killer。oom killer 可能要延迟几秒钟才执行,所以不要急不可耐的反复按 alt + sysrq + f ,以免杀掉很多无辜进程。sysrq 就是 print screen 键。