性能·内存 / 命令文档

Linux free 命令

$ free 17 个章节 Linux 命令详解

概述

内存管理专家必备技能

命令概述

free 命令用于显示系统内存使用情况,包括物理内存、交换分区、内核缓冲区等信息。它是系统管理员监控内存状态的核心工具。

核心作用:
                    
                        实时查看系统内存使用状态
                        监控缓存和缓冲区占用情况
                        分析交换分区使用率
                        为性能调优提供数据支持

基本语法

free [选项]
参数说明示例
-h, --human以人类可读格式显示(KB、MB、GB)free -h
-m以MB为单位显示free -m
-g以GB为单位显示free -g
-k以KB为单位显示(默认)free -k
-s 秒数持续监控,每隔指定秒数刷新free -s 2
-c 次数指定显示次数free -c 5
-t显示总计行free -t

输出详解

典型输出示例:

free -h

total used free shared buff/cache available Mem: 7.7Gi 2.1Gi 3.2Gi 234Mi 2.4Gi 5.1Gi Swap: 2.0Gi 0B 2.0Gi

Mem 行(物理内存)

total: 总物理内存大小

used: 已使用内存的大小,包含共享内存

free: 空闲内存,未使用内存的大小

shared: 共享内存的大小

buff/cache: 缓冲区/缓存

available: 新进程可用内存的大小(包括可回收的缓存,但是请注意并不是所有缓存都可回收)

Swap 行(交换分区)

total: 总交换分区大小

used: 已使用交换分区

free: 空闲交换分区

重要:如果swap used过高,说明物理内存不足,系统性能可能受影响。

内存类型详解

已使用 30%

缓冲区 15%

缓存 25%

空闲 30%

Buffer(缓冲区)

用于缓存磁盘块设备的数据,提高I/O效率。主要存储:

文件系统元数据

目录信息

inode 缓存

Cache(页面缓存)

用于缓存文件内容,加速文件访问。包括:

最近访问的文件数据

程序代码段

共享库

关键理解:
                    Buffer/Cache 内存在需要时可以被释放给应用程序使用,所以 available 才是真正可用的内存量!

实用示例

实时监控

free -h -s 2

每2秒刷新一次内存状态,适合监控内存变化

输出到文件

free -h -s 10 -c 6 >> mem.log

每10秒记录一次,共记录6次到日志文件

获取数值

free -m | awk 'NR==2{print $3}'

只获取已使用内存的MB数值,便于脚本处理

内存使用率

free | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}'

计算并显示内存使用百分比

运维场景应用

高负载排查

while true; do date; free -h; sleep 5; done

持续监控内存状态,配合时间戳排查问题

告警阈值: 可用内存 < 10%:严重告警 Swap使用率 > 50%:需要关注 可用内存持续下降:可能存在内存泄漏

性能分析脚本

#!/bin/bash
echo "=== 内存分析报告 ==="
free -h
echo ""
echo "内存使用率: $(free | awk 'NR==2{printf "%.2f%%", $3*100/$2}')"
echo "可用内存率: $(free | awk 'NR==2{printf "%.2f%%", $7*100/$2}')"
最佳实践: 关注 available 而不是 free 值 适量的 buffer/cache 是正常的,表示系统在优化性能 swap 使用不为0不一定是问题,但持续增长需警惕 结合 top、htop 等工具综合分析

高级用法

与其他命令结合

watch -n 1 "free -h && echo && ps aux --sort=-%mem | head -5"

实时显示内存状态和占用内存最多的5个进程

内存趋势分析

for i in {1..10}; do
  echo "$(date): $(free -m | awk 'NR==2{print $3,$7}')"
  sleep 60
done

每分钟记录一次使用内存和可用内存

常见问题

Q: free显示内存不足,但available很多?

A: 这是正常的。Linux会将空闲内存用作缓存,提高系统性能。真正可用的内存看available列。

Q: 如何释放缓存内存?

A: 可以使用以下命令:

echo 3 > /proc/sys/vm/drop_caches

注意:非必要情况下不建议手动释放,系统会自动管理。

Q: swap一直在增长怎么办?

A: 可能原因:

物理内存不足

某个进程内存泄漏

系统负载过高

建议用top或htop查找占用内存最多的进程。

总结

掌握要点
                    
                        关注available而非free
                        理解buffer/cache作用
                        监控swap使用情况
                        结合其他工具分析
                        建立监控告警机制

free命令是Linux系统管理的基石工具,熟练掌握它能让你更好地理解和优化系统性能!

同分类 · 其他命令文档