微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

但经过很长时间,caching清晰,系统开始使用交换。

Redis数据库大小与内存的比例(在Windows中用完ram)

在Windows上,内存中的数据是否可以跨虚拟内存页面连续存在?

C ++内存debugging器?

应用程序正在无故死亡。 怀疑高BSS。 如何debugging呢?

奇怪的内存问题?

现在我有两个问题..

为什么系统释放caching? 这会导致系统的IO比以前更高的问题

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

以下是最重要的信息:

更新 :这个问题又来了..

由于我已经运行命令sudo swapoff -a所以系统不使用交换,系统运行良好。

现在问题是为什么系统发布页面caching..?

那么系统会释放pgaecaching?

更新 :我已经解决了这个问题..

我从“理解Linux内核”一书中得到了答案

这本书说,如果有足够的可用内存,页面被保存在caching中无限期的时间,然后可以被其他进程重用,而无需访问磁盘。

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

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

谢谢

更新

为什么linux将内存交换到交换区甚至系统有足够的内存?

如果我们在进程find没有足够内存的情况下交换内存,那么进程获得足够的内存将需要很长时间。 它将需要调用页面框架回收。

我们之所以设vm.swappiness = 0,还是会有交换。

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

在C#中声明一个variables为“private”是否可以保护窗口中的内存不被内存扫描器访问?

Ontotext GraphDB进程终止

在应用程序内禁用Linux内存过量使用

处理器和虚拟/物理地址

可用和总内存总是相同的

看看你的进程正在运行(例如:MysqL,java等)

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

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

这不是问题(交换)

当linux操作系统正在运行时,它将其一些正在运行的服务放在交换分区中。

但是如果你开始使用这些服务,它们将被带回到RAM中。

您需要记住,从交换读取比从磁盘读取稍快。

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

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

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

4 Gb的全部内存

2 Gb被系统占用

用于应用程序Y的1 GB

X的1 Gb缓存

交换* 1 Gb的X(已删除加载应用程序Y)

您可以调整“swappiness”级别来增加或减少内核对交换空间的依赖。

即debian交换真正很少使用的数据。 我认为这种行为被认为是一种优化。 这个问题直接对应于这个问题。 您可以设置swappiness因子:

sudo sysctl vm.swappiness=10

echo 0 > /proc/sys/vm/swappiness

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐