|
|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在 Linux 运维过程中,很多人第一次使用 free 命令时,都会被输出结果吓到。
系统明明运行正常,服务也没有异常,但 free 显示 used 非常高、free 几乎为 0,看起来就像内存已经耗尽了一样。
事实上,这是 Linux 内存管理的正常行为。
一、先看一个常见的 free 输出
total used free shared buff/cache available
Mem: 7986 7420 120 180 446 5200
Swap: 2048 0 2048
很多人第一反应是:
free 只剩 120MB,内存是不是要爆了?
但实际上,这种判断方式是错误的。
二、Linux 的设计理念:内存不用就是浪费
Linux 有一个非常重要的内存管理原则:
空闲的内存,是被浪费的内存。
因此,Linux 会尽可能利用空闲内存来做缓存,以提升系统整体性能,而不是让内存一直保持空闲状态。
这些缓存主要包括:
- Page Cache(文件缓存)
- Buffer Cache(块设备缓存)
- dentry / inode 缓存
它们都会被统计进 used,而不是 free。
三、为什么 free 看起来几乎为 0?
系统运行一段时间后,内存通常会被这样使用:
- 一部分被进程真实占用
- 大量内存被用于文件与磁盘缓存
- Linux 主动压缩真正的 free 内存
于是你看到的现象是:
- free 非常小
- used 非常大
- 系统运行却完全正常
这是一种健康状态,不是异常。
四、判断内存是否紧张,要看 available
从较新的 Linux 版本开始,free 中增加了一个非常关键的字段:
它表示:
- 在不触发 OOM、不明显影响性能的前提下,系统还能提供给程序使用的内存。
简单理解就是:
- free:当前完全空闲的内存(参考意义不大)
- available:真正还能再用的内存(最重要)
只要 available 数值充足,就说明内存并不紧张。
五、缓存会不会“霸占”内存?
不会。
当系统需要为新进程分配内存时:
- Linux 会优先回收 Page Cache
- 不需要人工干预
- 不会影响正在运行的程序
缓存是可回收资源,不是死占内存。
六、什么时候才算真正的内存不足?
只有出现以下情况,才说明内存真的有风险:
- available 长时间处于很低水平
- 系统开始频繁使用 swap
- 应用响应明显变慢、卡顿
- 内核日志中出现 OOM Killer
常用排查命令包括:
- free -h
- vmstat 1
- dmesg | grep -i oom
七、为什么不建议随便清理缓存?
你可能见过这样的命令:
- echo 3 > /proc/sys/vm/drop_caches
复制代码 在生产环境中:
- 不建议频繁使用
- 可能导致磁盘 IO 突增
- 会降低整体性能
缓存是性能优化的一部分,而不是问题来源。
八、总结
- free 显示内存用完,并不代表内存真的耗尽
- Linux 会主动使用内存作为缓存
- 判断内存是否紧张,应重点关注 available
- 没有 OOM、系统不卡顿,就属于正常状态
|
|