你可以设置一个最小的Linux磁盘缓冲区大小?

我有一台相当老的Linux机器,内存为2GB,没有交换,而且工作得很好,系统使用每一块未使用的内存进行caching,效果很好。

但是,当我接近强调内存(例如,> 1950MB分配)时,它会慢慢爬行; 我怀疑这是因为没有剩余的磁盘缓冲区。 我知道OOM杀手很快就会生效,但通常不会到达目的地 – 速度变得非常慢,以至于到30-40的时候,没有任何进程取得进展(因此不会分配更多的内存),以及我必须重新启动它。

当我试图杀死一个进程来让机器响应,例如通过去控制台(通过Alt-F1,login,只是做一个“killall badprocess”),它通常工作,除了我必须等待在用户/密码和获得提示之间~10分钟 – 所有这些都是磁盘活动。

再次,没有交换,所以它不交换 – 这只是颠簸,因为它没有缓冲区。

我专门为磁盘缓冲区专门设置了100MB左右的磁盘缓冲区,这会稍早触发OOM杀手(毕竟,程序的内存要less一些),但另一方面会使机器始终处于响应状态。

有没有办法做到这一点? 我一直没能find/ proc / kernel或/ sys / vm条目来做这种事情。

看看/ proc / sys / vm / min_free_kbytes 。 这是免费kbytes的限制,触发杀手。 也可以在日志中查看关键字oom-killer,以便知道什么是被杀的(可以说你不想杀ssh ,你最好是renice

等待凶手释放记忆,有点像等待引擎停下来,告诉你什么时候该填满你的油箱。 凶手是一个最后的手段和绝望的资源匮乏的机器绝望的工具。 它会杀死下一个程序,而不会考虑这将如何影响您的应用程序,可达性,可靠性等等。 当恶魔杀手被调用时,你的服务器正喘不过气来,处于严重的状态。

相反,在应用程序环境中pipe理内存使用情况的主动方法要好得多。 你可以监视/ proc / meminfo的麻烦,并采取适当的行动,并在严重的情况变得难看之前减less你的工作量。