Linux系统命令free的使用方法

发布时间:2022-01-26 10:42:43 作者:kk
来源:亿速云 阅读:151
# 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

2.2 版本差异

不同版本存在语法差异: - 传统版本:free [-b|-k|-m|-g] [-o] [-s delay] [-t] [-V] - 新版语法:free [options]

2.3 兼容性说明

发行版 默认版本 备注
Ubuntu 22.04 3.3.17 支持–giga等新选项
CentOS 7 3.3.10 需升级procps-ng
Alpine 3.15 3.3.16 需安装busybox-extras

三、基本使用方法

3.1 默认输出解析

执行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:实际可用内存估算值

3.2 常用单位切换

通过参数指定显示单位:

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

四、高级参数详解

4.1 显示模式控制

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

4.2 刷新显示功能

free -s 5  # 每5秒刷新一次
free -s 10 -c 3  # 每10秒刷新,共3次
free --seconds 2 --count 5  # 新语法格式

4.3 低内存模式

free -l  # 显示详细高低内存统计(Linux特有)

4.4 其他实用参数

free --tera  # 以TB为单位显示
free --peta  # 以PB为单位显示
free --gibi  # 以GiB为单位(1024^3)

五、输出结果深度解析

5.1 内存类型详解

物理内存(Mem)

交换空间(Swap)

5.2 关键指标关系

实际可用内存 ≈ available
真实使用量 = used - buffers - cache
内存压力 = (used - buffers - cache) / total * 100%

5.3 缓存机制解析

Linux内存管理特性: - Buffers:块设备I/O缓存 - Cached:文件系统页面缓存 - SReclaimable:可回收的slab内存

六、使用场景案例

6.1 性能监控脚本

#!/bin/bash
while true; do
    clear
    free -h
    sleep 2
done

6.2 内存告警配置

# 监控可用内存低于10%时报警
THRESHOLD=10
AVLABLE=$(free | awk '/Mem/{printf("%.0f"), $7/$2*100}')
[ $AVLABLE -lt $THRESHOLD ] && echo "警报:可用内存仅剩${AVLABLE}%"

6.3 容器环境适配

# 在容器内获取正确内存数据
cat /sys/fs/cgroup/memory/memory.stat
free -h --cgroup

七、常见问题排查

7.1 典型问题分析

现象:free值很低但系统运行正常

原因:Linux积极利用空闲内存作缓存
验证:观察available值是否充足

现象:swap使用量突增

可能原因: 1. 物理内存耗尽 2. swappiness值设置过高 3. 内存泄漏进程

排查命令

cat /proc/sys/vm/swappiness  # 查看交换倾向值(0-100)
vmstat 1 5  # 监控si/so字段

7.2 数据不一致问题

freetop显示不一致时: 1. 确认单位是否相同 2. 检查是否包含buffers/cache 3. 考虑延迟采样差异

7.3 权限问题处理

# 遇到权限拒绝时
sudo free -m
# 或检查proc文件系统权限
ls -l /proc/meminfo

八、与其他命令配合

8.1 组合工具链

# 内存监控三板斧
free -h && vmstat -s && top -n1 -b | head -20

# 按进程排序内存使用
ps aux --sort=-%mem | head -10

8.2 性能分析组合

# 配合sar分析历史趋势
sar -r 1 3  # 内存使用采样
free -h -s 1 -c 3  # 同步采样

8.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

九、进阶技巧

9.1 内核参数调优参考

# 根据free结果调整
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

9.2 自动化监控方案

#!/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)

9.3 容器化环境适配

# 在Kubernetes中获取Pod内存
kubectl top pod
# 等价于
kubectl exec -it POD_NAME -- free -h

十、命令参考手册

10.1 完整参数表

参数 说明
-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 显示版本信息

10.2 返回值说明

十一、版本更新记录

11.1 重要版本变更

版本 变更内容
3.3.10 新增–gibi/–tebi等二进制前缀
3.3.12 支持cgroup v2内存统计
3.3.15 增加–percent显示百分比
3.3.17 优化容器环境检测逻辑

11.2 未来发展方向

十二、总结与最佳实践

12.1 使用建议

  1. 生产环境优先使用-h-m选项
  2. 监控脚本应关注available而非free
  3. 长期监控配合-s参数使用
  4. 临界值告警建议设置在85%左右

12.2 性能分析流程

  1. free -h查看整体情况
  2. vmstat 1观察交换频率
  3. top/htop定位具体进程
  4. pmap -x PID分析进程内存分布

12.3 延伸学习资源


本文档持续更新,最后修订时间:2023年10月
相关命令版本:procps-ng 3.3.17
适用内核版本:Linux 4.15+ “`

推荐阅读:
  1. Linux基本系统命令
  2. linux中free命令的使用方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux free

上一篇:Linux下zcat命令怎么用

下一篇:@Transactional注解怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》