Linux吃光内存

发生什么事?

Linux正在借用未使用的内存进行磁盘缓存。这让人觉得内存耗尽了,服务器快要撑不住了,但事实并非如此!一切都很好!

它为什么这么做?

磁盘缓存使系统更快、响应更快!除了让新手感到困惑之外,没有任何负面影响。它不会以任何方式从应用程序中拿走内存,永远不会!

如果我想运行更多应用程序呢?

如果您的应用程序需要更多内存,它们只需收回磁盘缓存。磁盘缓存总是可以立即返回给应用程序!你的内存不低!

我需要更多的交换吗?

不,磁盘缓存只是借用应用程序当前不需要的内存。它不会使用交换。如果应用程序需要更多内存,它们只需从磁盘缓存中取回。他们不会开始交换。

如何阻止Linux这样做?

不能禁用磁盘缓存。任何人想要禁用磁盘缓存的唯一原因是,他们认为这会占用应用程序的内存,但事实并非如此!磁盘缓存使应用程序加载更快、运行更顺畅,但它永远不会占用它们的内存!因此,绝对没有理由禁用它!

然而,如果您发现自己需要快速清除一些磁盘缓存来解决另一个问题,比如VM运行异常,您可以使用下面的方法强制linux以非破坏性方式删除缓存。

释放页面缓存(free pagecache):

# echo 1 > /proc/sys/vm/drop_caches

释放目录和索引节点缓存(dentries and inodes):

# echo 2 > /proc/sys/vm/drop_caches

释放页面缓存、目录缓存和索引节点缓存(free pagecache, dentries and inodes):

echo 3 > /proc/sys/vm/drop_caches

为什么使用top和free会说我所有的内存都被使用了呢?

这只是术语上的不同而已。您和Linux都同意应用程序占用的内存是“已用”的,而不用于任何用途的内存是“空闲的”。但是,如何计算当前用于某个应用程序但仍可供其它应用程序使用的内存?您认为将该内存计算为“空闲”或“可用”。但Linux将其计算为“已使用”,但也“可用”:

内存计算方法

这就是top和free所说的“缓冲区”和“缓存”。由于您的认为和Linux的术语不同,您可能会认为自己的操作系统内存不足,而实际情况并非如此。

我怎么看我到底有多少空闲内存?

查看操作系统在不交换的情况下可用内存,请运行命令free-m并查看“available”列:

free命令示例-1

如果你只是天真地看“used”和“free”列,你会认为你的服务器内存使用率达到99%,而实际上只有47%!

对于2016年之前安装的Linux操作系统,请查看“-/+buffers/cache”行中的“free”列。

free命令示例-2

我什么时候开始担心?

运行一段时间后,具有足够内存的健康Linux系统将显示以下预期的无害行为:

空闲(free)内存接近于零。使用(used)的内存接近于总内存。可用(available)内存(or "free + buffers/cache") 占总内存的20%以上。交换分区(swap)使用没有变化。

您可能需要查看的真正内存不足情况的警告信号:

可用(available)内存 (or "free + buffers/cache")接近于零。交换空间(swap)的使用在不断增大或者波动。使用命令dmesg查看系统日志并用关键词“oom-killer”进行过滤发现“the OutOfMemory-killer在运行。
分类: 源码分享 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录