Linux 上的空闲/缓存/可用内存

Linux 上的空闲/缓存/可用内存

我有Linux 使用空闲内存进行缓存,使系统运行更快。但是,Nagios 和 Paessler PRTG 监控系统都显示我的内存使用情况非常严重。

我可以更改 Nagios mem_usage 脚本以汇总可用内存和缓存内存,但这是正确的信息吗?我怀疑他们误解了 Linux 内存使用情况。

假设我有 8 GB 的 RAM。其中 5 GB 已使用,2 GB 已缓存,还有 1 GB 的可用内存。实际可用内存应该是可用内存+缓存内存(3 GB)?如果某个新应用程序需要额外的 3 GB RAM,它是否可以从缓存中取出所有内容并释放而不使用交换,或者缓存中应有的最小值是多少?

真实示例:

$ cat /proc/meminfo
MemTotal:        5984256 kB
MemFree:          137052 kB
Buffers:          140484 kB
Cached:          3439616 kB
SwapCached:          244 kB
Active:          3148824 kB
Inactive:        2341768 kB
...

我的监控工具显示我有 137 MB 的可用 RAM,但是缓存中有 ~3,5 GB。

谢谢!

答案1

我在 Nagios 中使用 check_mem.pl 插件时也有同样的经历。定义关键的发力点时,需要使用大写 C,而不是普通的 c。

像这样:

command[check_mem]=/usr/lib/nagios/plugins/check_mem -w 10 -C 5 -f

然后它会考虑缓存的内存并且不会发送警告。

答案2

Freemem 是未分配的内存,可立即使用。启动程序时会用到它,如果内存太低,通常会出现问题。监控以确保有几 MB 可用内存就足够了。我在我的 32 MB OpenWrt 路由器上监控 1 MB,在我的 Ubuntu 服务器上监控 10 MB。我还监控交换使用情况,因为随着内存负载的增加,交换使用情况会减少。

程序启动时通常不会使用所有必需的内存。程序的虚拟大小通常比常驻(内存中)大小大得多。剩余内存可以从磁盘(程序映像和它使用的库中的代码)和交换(已分配但未使用)中分配。

如果缓存内存过低,您可能会看到严重的性能问题。根据交换的编码和配置方式,不活动的页面可能会被交换以为您的程序腾出空间。这通常会导致页面交换比您预期的少得多。

我会监控缓存的内存以确保正在运行的程序的性能,而不是确保有内存可用于启动大型程序。

答案3

您应该将 meminfo 的全部输出都放上去。脏页由磁盘备份,但它们被算作页面缓存,应根据需要刷新到磁盘。

简而言之,你说的是对的。计算可用内存时,也要考虑缓存和缓冲区,但不要将脏页计入计算范围。

为了确保内存永远不会耗尽,请记录 Committed_AS 值。根据该值,您应该确定是否增加 RAM 或减少工作负载。

答案4

Linux 使用可用内存作为缓存,并在必要时清除缓存。您可以随时运行以下命令释放缓存内存:

同步;回显 3 > /proc/sys/vm/drop_caches

相关内容