当前位置:首页>Linux>Linux 把内存吃光了?别慌,你看到的可能是假象!

Linux 把内存吃光了?别慌,你看到的可能是假象!

  • 2026-10-05 20:42:18
Linux 把内存吃光了?别慌,你看到的可能是假象!
前段时间客户上了一个监控,然后经常性的提示内存预警
登陆主机通过命令free -m 
free -m              total       used       free    shared  buff/cache  availableMem:          32000      30000        200        50        9800      15000Swap:          8192          0       8192
很多人看到free 只有200M了,然后想着完了,主机内存已经耗尽,

于是开始重启服务、清理缓存,甚至怀疑服务器配置太低,准备扩容了。然后内存扩上去之后,运行一段时间又这样了。

但实际上,大多数情况下:你的内存很健康。

Linux 为什么总是把内存用满?

Linux 内核有一个重要设计理念:

空闲内存就是浪费。

内存的读写速度远远快于磁盘。

对于 Linux 来说,如果有大量内存闲置,不如拿来缓存磁盘中的数据。

这就是:

Page Cache(页缓存)

当程序读取文件时:

cat logfile.log

Linux 会把文件内容放入内存缓存。

下一次再访问这个文件,数据可能直接从内存读取。速度提升可能达到:

  • 数倍
  • 数十倍
  • 甚至上百倍

因此:Linux 会主动把空闲内存变成缓存。

这正是你看到free 很少的根本原因。实际上这些内存随时可以回收。

Linux 的内存到底分哪几类?

我们可以简单理解为:

类型

说明

Used

真正被应用程序占用

Free

完全未使用

Buffers

块设备缓冲

Cached

文件系统缓存

Available

应用可立即使用的内存

很多人只关注free 这个值,我们还碰到有人部署了监控,然后内存经常告警,一致以为内存不足。

实际上更应该关注Available,当前系统还能给应用程序提供多少内存而不触发 Swap。

如何判断服务器是否真的缺内存?

正常情况,我们通过

free -m

显示:

free 很少available 很多swap 基本不变

这种情况:

完全正常。

危险情况

出现以下现象:

1 Available 接近 0

available < 5%

说明真正可用内存已经很少。

2 Swap 持续增加

vmstat 1

发现:

siso

不断增长。

说明系统正在频繁换页。

甚至触发了OOM killer

查看

dmesg | grep -i oom

如果出现:

Out of memoryKilled process xxx

说明系统已经严重缺内存。

Linux 开始强制杀进程。

那么我们应该怎么监控linux 的内存呢 ?

不通linux 可能方案不通,centos 7.4 可以通过

cat /proc/meminfo MemTotal:        8174996 kBMemFree:         2290864 kBMemAvailable:    4276412 kB

这里给出两个命令,计算内存使用率的。

# 直接输出内存使用率百分比awk '/MemAvailable/ {avail=$2} /MemTotal/ {total=$2} END {printf "%.1f%%\n", (total-avail)/total*100}' /proc/meminfo# 带 swap 使用率一起输出awk '/MemAvailable/ {ma=$2} /MemTotal/ {mt=$2} /SwapFree/ {sf=$2} /SwapTotal/ {st=$2} END {printf "Mem: %.1f%% | Swap: %.1f%%\n", (mt-ma)/mt*100, (st-sf)/st*100}' /proc/meminfo

最新文章

随机文章