您好,登录后才能下订单哦!
# Linux系统命令free的使用方法
## 一、free命令概述
### 1.1 free命令简介
`free`是Linux系统中用于查看内存使用情况的核心命令之一。作为procps工具集的重要组成部分,它能够直观地展示系统的物理内存、交换空间(swap)和内核缓冲区的使用状态。该命令通过解析`/proc/meminfo`文件获取数据,以人类可读的格式呈现内存信息。
### 1.2 命令基本功能
- 显示系统总内存、已用内存、空闲内存
- 展示缓冲区和缓存使用情况
- 报告交换空间的使用状态
- 支持多种显示单位(KB、MB、GB等)
- 提供周期性刷新功能
### 1.3 适用场景
- 系统性能监控
- 内存泄漏排查
- 服务器资源规划
- 系统调优基准测试
- 容器/虚拟机资源监控
## 二、命令安装与版本
### 2.1 安装方法
大多数现代Linux发行版已预装free命令。如需手动安装:
```bash
# Debian/Ubuntu
sudo apt install procps
# RHEL/CentOS
sudo yum install procps-ng
# Arch Linux
sudo pacman -S procps-ng
不同版本存在语法差异:
- 传统版本:free [-b|-k|-m|-g] [-o] [-s delay] [-t] [-V]
- 新版语法:free [options]
发行版 | 默认版本 | 备注 |
---|---|---|
Ubuntu 22.04 | 3.3.17 | 支持–giga等新选项 |
CentOS 7 | 3.3.10 | 需升级procps-ng |
Alpine 3.15 | 3.3.16 | 需安装busybox-extras |
执行free
命令的典型输出:
total used free shared buff/cache available
Mem: 8000000 3000000 1000000 500000 4000000 3500000
Swap: 2000000 500000 1500000
字段说明: - total:总内存量 - used:已使用内存(含buffers/cache) - free:完全未使用的内存 - shared:共享内存(tmpfs等) - buff/cache:缓冲和页面缓存 - available:实际可用内存估算值
通过参数指定显示单位:
free -b # 字节(bytes)
free -k # KB(默认)
free -m # MB
free -g # GB
free -h # 人类可读格式(自动选择单位)
free --human --si # 以1000为基数换算
示例输出(-h格式):
total used free shared buff/cache available
Mem: 7.7G 3.1G 1.2G 512M 3.4G 3.5G
Swap: 2.0G 512M 1.5G
free -w # 宽模式(分开显示buffers和cache)
free -t # 显示总计行
free --wide --total # 组合使用
宽模式示例:
total used free shared buffers cache available
Mem: 8000000 2500000 1500000 500000 200000 3800000 4000000
Swap: 2000000 300000 1700000
Total: 10000000 2800000 3200000
free -s 5 # 每5秒刷新一次
free -s 10 -c 3 # 每10秒刷新,共3次
free --seconds 2 --count 5 # 新语法格式
free -l # 显示详细高低内存统计(Linux特有)
free --tera # 以TB为单位显示
free --peta # 以PB为单位显示
free --gibi # 以GiB为单位(1024^3)
实际可用内存 ≈ available
真实使用量 = used - buffers - cache
内存压力 = (used - buffers - cache) / total * 100%
Linux内存管理特性: - Buffers:块设备I/O缓存 - Cached:文件系统页面缓存 - SReclaimable:可回收的slab内存
#!/bin/bash
while true; do
clear
free -h
sleep 2
done
# 监控可用内存低于10%时报警
THRESHOLD=10
AVLABLE=$(free | awk '/Mem/{printf("%.0f"), $7/$2*100}')
[ $AVLABLE -lt $THRESHOLD ] && echo "警报:可用内存仅剩${AVLABLE}%"
# 在容器内获取正确内存数据
cat /sys/fs/cgroup/memory/memory.stat
free -h --cgroup
原因:Linux积极利用空闲内存作缓存
验证:观察available
值是否充足
可能原因: 1. 物理内存耗尽 2. swappiness值设置过高 3. 内存泄漏进程
排查命令:
cat /proc/sys/vm/swappiness # 查看交换倾向值(0-100)
vmstat 1 5 # 监控si/so字段
当free
与top
显示不一致时:
1. 确认单位是否相同
2. 检查是否包含buffers/cache
3. 考虑延迟采样差异
# 遇到权限拒绝时
sudo free -m
# 或检查proc文件系统权限
ls -l /proc/meminfo
# 内存监控三板斧
free -h && vmstat -s && top -n1 -b | head -20
# 按进程排序内存使用
ps aux --sort=-%mem | head -10
# 配合sar分析历史趋势
sar -r 1 3 # 内存使用采样
free -h -s 1 -c 3 # 同步采样
# 生成CSV格式数据
free -m | awk 'NR>1{print $1","$2","$3","$4}' > mem_usage.csv
# 配合gnuplot绘图
free -s 1 -c 60 | grep Mem | awk '{print $3}' > mem.dat
# 根据free结果调整
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
#!/usr/bin/python3
import subprocess
import time
def monitor_mem(interval=5, threshold=85):
while True:
result = subprocess.run(['free','-m'], stdout=subprocess.PIPE)
lines = result.stdout.decode().split('\n')
mem_line = lines[1].split()
used_percent = 100 * int(mem_line[2]) / int(mem_line[1])
if used_percent > threshold:
alert_msg = f"内存使用率{used_percent:.1f}%超过阈值{threshold}%"
subprocess.run(['wall', alert_msg])
time.sleep(interval)
# 在Kubernetes中获取Pod内存
kubectl top pod
# 等价于
kubectl exec -it POD_NAME -- free -h
参数 | 说明 |
---|---|
-b, –bytes | 以字节为单位显示 |
-k, –kilo | 以KB为单位(默认) |
-m, –mega | 以MB为单位 |
-g, –giga | 以GB为单位 |
-h, –human | 自动选择合适单位 |
-w, –wide | 宽输出模式 |
-c, –count N | 显示N次后退出 |
-s, –seconds N | 每N秒刷新一次 |
–si | 使用1000进制而非1024 |
-t, –total | 显示内存+swap总计行 |
–help | 显示帮助信息 |
–version | 显示版本信息 |
版本 | 变更内容 |
---|---|
3.3.10 | 新增–gibi/–tebi等二进制前缀 |
3.3.12 | 支持cgroup v2内存统计 |
3.3.15 | 增加–percent显示百分比 |
3.3.17 | 优化容器环境检测逻辑 |
-h
或-m
选项available
而非free
-s
参数使用free -h
查看整体情况vmstat 1
观察交换频率top/htop
定位具体进程pmap -x PID
分析进程内存分布Documentation/admin-guide/mm/
man 5 proc
本文档持续更新,最后修订时间:2023年10月
相关命令版本:procps-ng 3.3.17
适用内核版本:Linux 4.15+ “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。