为什么linux有足够的内存但使用交换

时间:2014-08-20 07:23:12

标签: linux memory erlang

我有一台服务器运行erlang应用程序,比如riak ..

在出现问题之前,内存使用情况就像这样

memory before

但很长一段时间后,缓存很清楚,系统开始使用swap。 memory later

现在我有两个问题..

  1. 为什么系统会释放缓存?这导致系统的IO高于之前的问题

  2. 为什么系统仍有足够的内存,但仍然使用交换..

  3. 以下是最重要的信息: top

    更新:这个问题又来了..
    enter image description here 因为我已经运行命令 sudo swapoff -a 因此系统不使用交换,系统运行良好 现在问题是为什么系统发布页面缓存了..?
    那么系统将释放pgae缓存的情况是什么?

    更新:我已解决此问题..
    我从“了解Linux内核”一书中得到了答案 该书说,如果有足够的可用内存,页面将无限期地保存在缓存中,然后可以被其他进程重用,而无需访问磁盘。

    我认为这意味着如果页面缓存长时间停留在系统中,系统将释放缓存。

    读完linux源代码后,我会更新它。为什么系统会释放缓存的页面,即使它有足够的内存?

    由于

    更新

    1. 即使系统有足够的内存,linux将内存交换到交换区域的原因是什么?
    2. 如果我们在进程发现内存不足时交换内存,那么进程需要很长时间才能获得足够的内存。它需要调用页面框架回收。

      1. 我们设置vm.swappiness = 0的原因,仍然会有交换。
      2. 后端有一个global_reclaim。哪个不检查swappiness值

6 个答案:

答案 0 :(得分:1)

查看正在运行的进程(例如:mysql,java等...)

如果为这些进程设置的内存限制太低,有时它们需要更多,则缺少的内存不会被带到缓冲区,而是交换掉。

我认为这可以解释你的问题。

答案 1 :(得分:0)

这不是问题(交换)

当Linux操作系统运行时,它会在交换分区中“放下”一些正在运行的服务。

但是如果你开始使用这些服务,它们将重新进入RAM。

答案 2 :(得分:0)

你需要记住,从交换中读取比从磁盘读取要快一些。

假设,保持交换是件好事(并不意味着你的记忆已满)。

所以,假设你有4 Gb的内存,你有2 Gb的可用内存。然后你加载一个2Gb的应用程序A,你将完全占用你所有的4Gb内存。然后关闭应用程序X并加载应用程序Y(1Gb)。这意味着应用程序X的一半将被移动到交换,主内存现在将包含Y和一半的“缓存”。

在这种情况下,您将拥有以下方案:

  • 4 Gb满内存
  • 系统占用的2 Gb
  • 1 Gb申请Y
  • X
  • 的1 Gb缓存

交换  * 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

只有在绝对必要时才会进行系统交换。