linux - 为什么linux有足够的内存但是使用了swap

标签 linux memory erlang

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

问题之前,内存使用是这样的

memory before

但是过了很长时间,缓存被清除了,系统开始使用交换。 memory later

现在我有两个问题..

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

  2. 为什么系统还有足够的内存,但是swap还在使用..

以下是最重要的信息: top

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

更新:我已经解决了这个问题..
我从《Understanding Linux Kernel》一书中得到了答案
书上说如果有足够的空闲内存,页面会无限期地保存在缓存中,然后可以被其他进程重用,而无需访问磁盘。

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

在我阅读了 linux 源码之后,我会更新它。为什么系统有足够的内存也会释放页面缓存?

谢谢

更新

  1. linux为什么即使系统有足够的内存也要交换内存到交换区?

如果我们在进程发现内存不足时交换内存,那么进程需要很长时间才能获得足够的内存。它需要调用页框回收。

  1. 之所以设置vm.swappiness=0,还是会有swap。

后端有一个 global_reclaim。不检查swappiness值

最佳答案

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

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

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

关于linux - 为什么linux有足够的内存但是使用了swap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25398962/

相关文章:

ERLANG wait() 和阻塞

c - 是否有预先存在的函数或代码可用于计算 POSIX 程序中的 TCP 段校验和

linux - 使用 awk 删除重复文件时出现问题

python - Centos Python Dockerfile 图像大小减少

linux - 如何在创建时复制文件而不在 Unix/Linux 中破坏它

c++ - C复制3维数组

c++ - ram 中的共享内存或命名管道?

c# - 可以在不刷新的情况下连续写入流,将其内容强制写入大对象堆吗?

ubuntu - 如何在基于 Ubuntu 的 linux 上使用 erlangs GUI 调试器调试 Elixir?

具有大状态的erlang gen_server