您可以设置最小的Linux磁盘缓冲区大小吗?


8

我有一台比较旧的Linux计算机,内存为2GB,没有交换,并且运行良好,该系统使用所有未使用的内存进行缓存,效果很好。

但是,当我几乎要强调内存(例如,已分配的> 1950MB)时,它会缓慢地进行爬网。我怀疑这是因为没有剩余的磁盘缓冲区。我知道OOM杀手将很快生效,但通常不会到达目的地-它变得如此缓慢,以至于加载射击达到30-40,没有进程取得任何进展(因此没有分配更多的内存),并且我必须重新启动它。

当我尝试杀死一个进程以使机器响应时,例如通过转到控制台(通过Alt-F1,登录并执行“ killall badprocess”),它通常可以工作,除了我必须等待从用户名/密码到出现提示为止的约10分钟-始终在磁盘活动期间进行。

再说一次,没有交换,所以它没有交换-只是因为没有可用的缓冲区而rash动。

我将有100MB左右的空间专门用于磁盘缓冲区,这会更早地触发OOM杀手(毕竟,程序的内存更少),但是另一方面,它会使机器始终保持响应状态。

有没有办法做到这一点?我还没有找到执行此类操作的/ proc / kernel或/ sys / vm条目。


我也有同样的问题,不幸的是,到目前为止,答案都没有帮助。
KrišjānisNesenbergs

Answers:


1

看看/ proc / sys / vm / min_free_kbytes。触发oom-killer的是空闲KB的限制。此外,它会是很好的,在日志的关键字OOM杀手,为了知道什么是被杀害检查{propably你不想杀SSH,你最好还是使用renice它}


谢谢。我扩大了它,但这似乎并不能解决问题-物理内存快要用尽时,就没有缓冲内存了,并且计算机的运行速度变慢了。

这里也没有帮助,系统仍然完全没有响应。
Tronic

这实际上帮助了我,我也有2GB的RAM和我设置为500MB差不多-现在没有减速/挂断
KrišjānisNesenbergs

我目前正在工作站上测试此设置。我有8 GB的RAM,大多数情况下我不使用超过5 GB的内存...除非出于某种原因我必须启动需要约4 GB RAM的Windows VM。我在主机操作系统上设置了ZRAM,因为我的硬盘驱动器是机械式的,但是由于文件系统缓冲区和缓存的RAM空间不足,RAM几乎已满,它仍然变得非常慢。我只是用vm.min_free_kbytes,以确保我总是至少有2 GB可用,并有其余分页到压缩的RAM(这方法比正常快的交换空间)。稍后将发布结果。
RAKK

1

等待oom-killer释放内存,就像等待引擎停在您的汽车上,告诉您何时该加油。oom-killer是对资源匮乏的机器的不得已而为之的绝望手段。它会杀死它接触的下一个程序,而不会考虑它将如何影响您的应用程序,可访问性,可靠性等。调用oom-killer时,您的服务器喘气并处于紧急状态。

相反,您最好采取积极的方法来管理应用程序环境中的内存使用情况。您可以监视/ proc / meminfo的故障,并采取适当的措施并在严重的情况变得丑陋之前减少工作量。


我发现的情况恰好是服务器喘气和处于紧急状态的时间。从完全响应的计算机到响应Ctrl-Alt-F1(从X切换到控制台)需要1分钟的时间不到20秒。而且登录是不可能的,因为它会在1分钟后超时甚至不要求输入密码。这是一台运行许多进程的机器。每个人都不是问题。另外,这严格来说是一个内存问题-只要剩下大约50MB的磁盘缓冲区,CPU就可以,磁盘也可以。

如果您使用ulimit,并且应用程序使用了超过阈值的措施怎么办?
Nikolaidis Fotis 2010年

问题是所有申请的总和。正在运行20个左右,每个分配20-100 MB。它可以正常工作数周,甚至数月,但是当他们都希望同时分配约100MB的内存时,所有内容都会崩溃并烧毁。我宁愿oom_killer杀死其中之一,也不必自己重启计算机。无论如何,我现在已经启用交换功能-大多数应用程序不会一直使用所有内存,因此即使在物理内存不足的情况下,计算机仍保持稳定。但是,如果可以的话,我宁愿完全不交换这台机器。

1
无法解决实际问题,包括以下问题:不能设置适当的内存使用限制(ulimit不是很有用),应用程序容易因内存分配而崩溃,OOM杀手无法尽早触发以及大量磁盘浪费和无响应由所有这些造成的。我只是浪费了30分钟的雇主时间,因为开发机器在编译我的代码时会浪费磁盘半个小时,而不是简单地在不到一秒钟的时间内杀死需要杀死(或编译自身)的Chromium进程。完成它。
Tronic

如果设置oom_adj正确,您的桌面系统可以像Android那样工作,该系统实际上总是与OOM Killer对抗运行(从技术上讲,这是一个“低内存杀手”,可通过进行调整/sys/module/lowmemorykiller)。逻辑是连续地将非关键后台进程标记为OOM杀手的潜在受害者,并寻找被杀死的进程,并缓慢地重新启动所需的被杀死程序,以免给系统增加负担。只要确保将继续重新启动其他进程的进程标记为超出OOM杀手的限制。
Mikko Rantalainen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.