您能设置最小 Linux 磁盘缓冲区大小吗?

您能设置最小 Linux 磁盘缓冲区大小吗?

我有一台相当旧的 Linux 机器,它有 2GB 的 RAM,没有交换,但它运行得很好,系统利用每一块未使用的内存进行缓存,效果很好。

但是,当我的内存即将耗尽时(例如,分配了 >1950MB),它就会变得非常缓慢;我怀疑这是因为没有剩余的磁盘缓冲区。我知道 OOM 杀手很快就会生效,但它通常不会到达那里——它变得非常慢,以至于负载猛增到 30-40,没有进程取得任何进展(因此不会分配更多内存),我不得不重新启动它。

当我尝试仅终止一个进程以使机器响应时,例如通过进入控制台(通过 Alt-F1,登录,然后执行“killall badprocess”),它通常可以工作,只是我必须在用户/密码和获取提示之间等待约 10 分钟 - 所有这些都是在磁盘活动时进行的。

再次强调,没有交换,所以它不是交换——它只是在抖动,因为它没有剩余的缓冲区。

我会将大约 100MB 的空间专门用作磁盘缓冲区,这样可以更早地触发 OOM 杀手(毕竟程序的内存较少),但另一方面可以让机器始终保持响应。

有办法吗?我找不到执行此类操作的 /proc/kernel 或 /sys/vm 条目。

答案1

看一下/proc/sys/vm/min_free_kbytes。这是触发 oom-killer 的可用千字节数限制。另外,最好检查日志中的关键字 oom-killer,以便了解正在被杀死的内容(可能你不想杀死 ssh,你最好雷尼塞它}

答案2

等待 oom-killer 释放内存有点像等待汽车引擎停止以告诉您何时该加油。oom-killer 是资源匮乏的机器的最后手段和绝望之举。它会杀死它接触的下一个程序,而不会考虑这会如何影响您的应用程序、可达性、可靠性等。当 oom-killer 被调用时,您的服务器正处于喘不过气来的状态,处于危急状态。

相反,您最好采取积极的方式来管理应用程序环境中的内存使用情况。您可以监视 /proc/meminfo 以查找问题,并在情况变得糟糕之前采取适当的措施并减少工作负载。

相关内容