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

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

但是很长一段时间后,缓存已清除并且系统开始使用交换。

现在我有两个问题。

  • 为什么系统释放缓存?这会导致系统的IO高于
  • 之前的问题
  • 为什么系统仍然有足够的内存,但是仍然使用swap。

    以下是最重要的信息:

    更新:此问题再次出现。

    由于我已经运行命令sudo swapoff -a因此系统不使用交换,系统运行良好。
    现在的问题是为什么系统发布页面被缓存了..?
    系统将释放pgae缓存的情况是什么?

    更新:我已经解决了这个问题。
    我从《了解Linux内核》一书中得到了答案
    该书说,如果有足够的可用内存,则该页将在不确定的时间段内保留在高速缓存中,然后可以在不访问磁盘的情况下由其他进程重用。

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

    阅读linux源码后,我将对其进行更新。为什么即使有足够的内存,系统也会释放缓存的页面?

    谢谢

    更新
  • 为什么Linux交换内存以使交换区即使系统有足够的内存也要这么做?

  • 如果我们在一个进程发现没有足够的内存时交换内存,那么该进程将需要很长时间才能获得足够的内存。它将需要调用页面框架回收。
  • 我们设置vm.swappiness = 0的原因,仍然会有交换。

  • 后端有一个global_reclaim。不检查交换值

    最佳答案

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

    如果您为这些进程设置的内存限制太低,有时又需要更多,则丢失的内存不会被带到缓冲区上,而是会在交换时被占用。

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

    09-04 20:42
    查看更多