我有一台服务器运行erlang应用程序,比如riak ..
在出现问题之前,内存使用情况就像这样
但很长一段时间后,缓存很清楚,系统开始使用swap。
现在我有两个问题..
为什么系统会释放缓存?这导致系统的IO高于之前的问题
为什么系统仍有足够的内存,但仍然使用交换..
以下是最重要的信息:
更新:这个问题又来了..
因为我已经运行命令
sudo swapoff -a
因此系统不使用交换,系统运行良好
现在问题是为什么系统发布页面缓存了..?
那么系统将释放pgae缓存的情况是什么?
更新:我已解决此问题..
我从“了解Linux内核”一书中得到了答案
该书说,如果有足够的可用内存,页面将无限期地保存在缓存中,然后可以被其他进程重用,而无需访问磁盘。
我认为这意味着如果页面缓存长时间停留在系统中,系统将释放缓存。
读完linux源代码后,我会更新它。为什么系统会释放缓存的页面,即使它有足够的内存?
由于
更新
如果我们在进程发现内存不足时交换内存,那么进程需要很长时间才能获得足够的内存。它需要调用页面框架回收。
后端有一个global_reclaim。哪个不检查swappiness值
答案 0 :(得分:1)
查看正在运行的进程(例如:mysql,java等...)
如果为这些进程设置的内存限制太低,有时它们需要更多,则缺少的内存不会被带到缓冲区,而是交换掉。
我认为这可以解释你的问题。
答案 1 :(得分:0)
这不是问题(交换)
当Linux操作系统运行时,它会在交换分区中“放下”一些正在运行的服务。
但是如果你开始使用这些服务,它们将重新进入RAM。
答案 2 :(得分:0)
你需要记住,从交换中读取比从磁盘读取要快一些。
假设,保持交换是件好事(并不意味着你的记忆已满)。
所以,假设你有4 Gb的内存,你有2 Gb的可用内存。然后你加载一个2Gb的应用程序A,你将完全占用你所有的4Gb内存。然后关闭应用程序X并加载应用程序Y(1Gb)。这意味着应用程序X的一半将被移动到交换,主内存现在将包含Y和一半的“缓存”。
在这种情况下,您将拥有以下方案:
交换 * X为1 Gb(已移除以加载应用程序Y)
答案 3 :(得分:0)
你可以调整" swappiness"增加或减少内核对交换空间的依赖程度。
答案 4 :(得分:0)
即。 debian交换真的很少使用数据。我认为这种行为被认为是一种优化。 此问题直接对应于此one。 您可以设置swappiness factor:
sudo sysctl vm.swappiness=10
答案 5 :(得分:0)
echo 0 > /proc/sys/vm/swappiness
只有在绝对必要时才会进行系统交换。