linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > Linux free查看内存使用情况

Linux使用free命令查看内存使用情况的方法详解

作者:Jinkxs

在 Linux 系统管理中,内存资源的有效管理和监控是保障系统稳定运行和高性能的关键因素,无论是服务器运维、开发调试还是日常使用,了解系统当前的内存使用情况都至关重要,本文将带大家掌握 free 命令的使用方法,需要的朋友可以参考下

在 Linux 系统管理中,内存资源的有效管理和监控是保障系统稳定运行和高性能的关键因素。无论是服务器运维、开发调试还是日常使用,了解系统当前的内存使用情况都至关重要。free 命令(英文全称:free memory)正是 Linux 系统中用于显示系统内存使用情况的核心工具。它能够实时展示物理内存、交换内存(Swap)以及缓存和缓冲区的详细信息,帮助我们快速诊断内存相关问题,优化系统性能。掌握 free 命令的使用方法,是每一位 Linux 用户和系统管理员必备的技能。

一、free命令简介

free 命令(英文全称:free memory)是 Linux 系统中一个非常重要的命令行工具,专门用于显示系统内存的使用情况。它能够提供关于物理内存(RAM)、交换内存(Swap)以及系统缓存和缓冲区的详细统计信息,是进行内存分析和性能调优的首选工具。

1.1 为什么使用free?

1.2free命令的运行原理

free 命令通过读取 /proc/meminfo 文件来获取内存相关的统计数据。该文件包含了系统内存的详细信息,包括总内存、已用内存、可用内存、缓存、缓冲区、交换空间等。free 命令会将这些信息格式化并展示给用户,使用户能够清晰地了解系统内存的分配和使用情况。

1.3 基本用法示例

$ free
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

这个简单的命令会显示系统内存的使用情况,包括总内存、已用内存、空闲内存、共享内存、缓冲区和缓存、可用内存以及交换内存的信息。

二、free命令的基础用法

2.1 显示内存使用情况

最基本的用法就是直接运行 free 命令,显示系统内存的基本使用情况。

$ free
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

输出字段解释:

2.2 以人类可读格式显示

使用 -h 选项可以让输出以人类可读的格式显示,自动选择合适的单位(K, M, G, T)。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G
Swap:          2.0G          0B        2.0G

2.3 循环显示内存使用情况

使用 -c 选项可以让 free 命令循环显示内存使用情况,间隔一定秒数刷新一次。

$ free -c 5 -s 2
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

在这个例子中,free 命令会循环显示 5 次,每次间隔 2 秒。

三、free命令的高级选项详解

3.1-h选项:人类可读格式

-h 选项将内存大小以人类可读的格式显示,自动选择合适的单位(K, M, G, T)。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G
Swap:          2.0G          0B        2.0G

3.2-s选项:指定刷新间隔

-s 选项用于指定每次刷新之间的秒数,常与 -c 选项配合使用。

$ free -s 3 -c 5
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

3.3-c选项:指定刷新次数

-c 选项用于指定总共刷新多少次后停止。

$ free -c 3 -s 1
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

3.4-w选项:显示详细内存信息

-w 选项显示额外的内存信息,包括 CommitLimitCommitted_AS 等。

$ free -w
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152
CommitLimit:  6179328     6179328
Committed_AS:  6179328     6179328

3.5-V选项:显示版本信息

-V 选项用于显示 free 命令的版本信息。

$ free -V
free from procps-ng 3.3.12

3.6-l选项:显示详细内存信息

-l 选项显示低内存和高内存的详细信息。

$ free -l
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Low:        8174336     2048576     3072512
High:           0           0           0
Swap:       2097152           0     2097152

3.7-m选项:以 MB 为单位显示

-m 选项以 MB 为单位显示内存大小。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7880        1999        2999         100        2981        5695
Swap:          2048           0        2048

3.8-g选项:以 GB 为单位显示

-g 选项以 GB 为单位显示内存大小。

$ free -g
              total        used        free      shared  buff/cache   available
Mem:            7           1           2           0           2           5
Swap:            2           0           2

3.9-t选项:显示总计行

-t 选项在输出末尾添加一行总计信息。

$ free -t
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152
Total:     10271488     2048576     5169664

四、free命令在脚本中的应用

4.1 内存监控脚本

编写一个简单的脚本来监控系统内存使用情况。

#!/bin/bash

# 内存监控脚本
THRESHOLD=80  # 设置阈值为 80%

# 获取内存使用情况
MEM_INFO=$(free -m)
TOTAL_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $2}')
USED_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $3}')
FREE_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $4}')

# 计算使用率
USAGE_PERCENTAGE=$((USED_MEM * 100 / TOTAL_MEM))

# 检查是否超过阈值
if [ "$USAGE_PERCENTAGE" -gt "$THRESHOLD" ]; then
    echo "Warning: Memory usage is ${USAGE_PERCENTAGE}%, exceeding threshold of ${THRESHOLD}%"
    echo "Total: ${TOTAL_MEM}MB, Used: ${USED_MEM}MB, Free: ${FREE_MEM}MB"
else
    echo "OK: Memory usage is ${USAGE_PERCENTAGE}%, below threshold of ${THRESHOLD}%"
    echo "Total: ${TOTAL_MEM}MB, Used: ${USED_MEM}MB, Free: ${FREE_MEM}MB"
fi

4.2 自动清理脚本

结合 free 命令和 kill 命令,编写一个自动清理内存的脚本。

#!/bin/bash

# 清理内存脚本
# 先检查内存使用情况
echo "Before cleanup:"
free -h

# 清理缓存和缓冲区
echo "Clearing cache and buffers..."
sync
echo 3 > /proc/sys/vm/drop_caches

# 检查清理后的内存使用情况
echo "After cleanup:"
free -h

4.3 内存使用报告生成

生成详细的内存使用报告。

#!/bin/bash

# 生成内存使用报告
REPORT_FILE="/tmp/memory_report_$(date +%Y%m%d_%H%M%S).txt"

{
    echo "Memory Usage Report - $(date)"
    echo "================================="
    echo ""
    echo "1. General Memory Usage:"
    echo "-----------------------"
    free -h
    
    echo ""
    echo "2. Detailed Memory Information:"
    echo "------------------------------"
    free -w
    
    echo ""
    echo "3. Memory Usage Statistics:"
    echo "--------------------------"
    echo "Total Memory: $(free -h | awk 'NR==2 {print $2}')"
    echo "Used Memory: $(free -h | awk 'NR==2 {print $3}')"
    echo "Free Memory: $(free -h | awk 'NR==2 {print $4}')"
    echo "Available Memory: $(free -h | awk 'NR==2 {print $6}')"
    
    echo ""
    echo "4. Swap Usage:"
    echo "-------------"
    echo "Total Swap: $(free -h | awk 'NR==3 {print $2}')"
    echo "Used Swap: $(free -h | awk 'NR==3 {print $3}')"
    echo "Free Swap: $(free -h | awk 'NR==3 {print $4}')"
    
} > "$REPORT_FILE"

echo "Report generated: $REPORT_FILE"

4.4 定时任务中的内存检查

crontab 中设置定时任务来定期检查内存使用情况。

# 每天上午 9 点检查内存使用情况
0 9 * * * /path/to/memory_monitor.sh >> /var/log/memory_check.log 2>&1

# 每小时检查一次并发送告警邮件(如果内存不足)
0 * * * * /path/to/memory_alert.sh

五、free命令与其他命令的结合使用

5.1 与grep结合筛选特定信息

使用 grep 过滤 free 命令的输出,获取特定信息。

# 查找内存使用率超过 80% 的系统
$ free -h | grep -E '[8-9][0-9]%|100%'
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G

# 查找特定列的信息
$ free -h | grep "Mem"
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G

5.2 与awk结合处理数据

使用 awkfree 命令的输出进行复杂的数据处理。

# 计算内存使用率
$ free -h | awk 'NR==2 {print "Memory Usage: " ($3/$2)*100 "%"}'

# 找出内存使用量最高的进程(需要结合 ps 命令)
$ free -h | awk 'NR==2 {print "Available Memory: " $6}'

5.3 与sort结合排序

使用 sortfree 命令的输出进行排序。

# 按照内存使用量排序(需要结合其他命令)
# 注意:free 命令本身不直接支持排序,但可以与其他命令结合

5.4 与wc结合统计行数

使用 wc 统计 free 命令输出的行数。

# 统计 free 命令输出的行数
$ free | wc -l
2

# 统计非标题行的数量
$ free | tail -n +2 | wc -l
1

5.5 与head和tail结合截取数据

使用 headtail 来截取 free 命令的部分输出。

# 显示前 2 行(包括标题)
$ free -h | head -2

# 显示最后 1 行
$ free -h | tail -1

5.6 与sed结合格式化输出

使用 sedfree 命令的输出进行格式化。

# 将内存使用率字段替换为星号
$ free -h | sed 's/\([0-9]*\)%/\*\1\*/'

六、free命令的实用技巧与最佳实践

6.1 快速查看内存使用情况

结合 free 命令和 awk 命令快速获取关键信息。

# 获取当前内存使用率
$ free -h | awk 'NR==2 {print "Memory Usage: " ($3/$2)*100 "%"}'

# 获取可用内存大小
$ free -h | awk 'NR==2 {print "Available Memory: " $6}'

6.2 创建别名简化操作

.bashrc 文件中添加别名,提高使用效率。

# 添加到 ~/.bashrc
alias freem='free -m'
alias freeh='free -h'
alias freeall='free -h -w -t'

# 重新加载配置
$ source ~/.bashrc

# 使用别名
$ freem
$ freeh
$ freeall

6.3 监控脚本模板

创建一个通用的内存监控脚本模板。

#!/bin/bash

# 通用内存监控脚本
check_memory_usage() {
    local threshold=${1:-80}
    local log_file=${2:-"/var/log/memory_monitor.log"}
    
    echo "$(date): Checking memory usage..." >> "$log_file"
    
    # 获取内存使用情况
    MEM_INFO=$(free -m)
    TOTAL_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $2}')
    USED_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $3}')
    FREE_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $4}')
    AVAILABLE_MEM=$(echo "$MEM_INFO" | awk 'NR==2 {print $6}')
    
    # 计算使用率
    USAGE_PERCENTAGE=$((USED_MEM * 100 / TOTAL_MEM))
    
    if [ "$USAGE_PERCENTAGE" -gt "$threshold" ]; then
        echo "$(date): CRITICAL: Memory usage is ${USAGE_PERCENTAGE}%, exceeding threshold of ${threshold}%" >> "$log_file"
        # 可以在这里添加邮件通知或其他告警机制
    else
        echo "$(date): OK: Memory usage is ${USAGE_PERCENTAGE}%, below threshold of ${threshold}%" >> "$log_file"
    fi
    
    # 输出详细信息
    echo "Total: ${TOTAL_MEM}MB, Used: ${USED_MEM}MB, Free: ${FREE_MEM}MB, Available: ${AVAILABLE_MEM}MB" >> "$log_file"
}

# 调用函数
check_memory_usage 80

6.4 理解内存使用指标

深入理解 free 命令输出的各个指标含义:

七、free命令的性能考量与注意事项

7.1 性能影响

free 命令本身是一个非常轻量级的命令,执行速度极快,几乎不会对系统性能产生任何影响。即使在高频率调用的情况下,它也能保持稳定的性能。

7.2 内存使用

free 命令的内存占用非常小,通常只在读取 /proc/meminfo 文件时使用少量内存。

7.3 磁盘 I/O

free 命令主要读取 /proc/meminfo 文件,对磁盘 I/O 的影响微乎其微。

7.4 权限要求

free 命令通常不需要特殊权限即可运行,但某些高级选项可能需要 root 权限。

# 普通用户可以正常运行
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G
Swap:          2.0G          0B        2.0G

# root 用户可以获取更详细的信息
$ sudo free -w
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152
CommitLimit:  6179328     6179328
Committed_AS:  6179328     6179328

八、free命令的跨平台兼容性

8.1 不同 Unix/Linux 发行版

free 命令在大多数 Unix 和 Linux 系统中都可用,包括 Ubuntu、CentOS、Fedora、Debian、Arch Linux 等。不同发行版的默认行为基本一致,但某些选项可能略有差异。

8.2 与 macOS 的兼容性

在 macOS 系统中,free 命令也存在,但部分选项可能与 Linux 系统略有不同。

# macOS 中的 free 命令
$ free
              total        used        free      shared  buff/cache   available
Mem:        8174336     2048576     3072512      102400     3053248     5843200
Swap:       2097152           0     2097152

8.3 在容器环境中的表现

在 Docker 等容器环境中,free 命令同样正常工作,其行为与宿主机一致。

$ docker run -it ubuntu bash
root@container:/# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        1.9G        2.9G       100M        2.9G        5.6G
Swap:          2.0G          0B        2.0G

九、free命令的常见问题与解决方案

9.1 内存使用率显示异常

问题描述

free 命令显示的内存使用率与预期不符。

解决方案

# 检查是否有大量缓存和缓冲区
$ free -h

# 清理缓存和缓冲区
$ sync && echo 3 > /proc/sys/vm/drop_caches

# 再次检查内存使用情况
$ free -h

9.2 系统提示内存不足但实际内存充足

问题描述

系统报告内存不足,但 free 命令显示可用内存很多。

解决方案

# 检查内存碎片
$ cat /proc/zoneinfo

# 检查应用程序内存使用情况
$ ps aux | sort -rnk4 | head -10

# 检查交换空间使用情况
$ free -h

9.3 内存泄漏排查

问题描述

怀疑系统存在内存泄漏。

解决方案

# 持续监控内存使用情况
$ free -s 5 -c 10

# 检查特定进程的内存使用情况
$ ps aux | grep <process_name>

# 使用 top 命令查看内存消耗高的进程
$ top

9.4 交换空间使用过多

问题描述

系统频繁使用交换空间,性能下降。

解决方案

# 查看交换空间使用情况
$ free -h

# 检查交换空间配置
$ swapon --show

# 增加物理内存或调整交换空间大小
# (需要 root 权限)

十、free命令的未来发展方向

10.1 更智能的内存分析

未来的 free 命令可能会集成更智能的分析功能,例如自动识别潜在的内存问题、预测内存需求等。

10.2 与云存储集成

随着云计算的发展,free 命令可能会更好地支持云环境中的内存监控。

10.3 更丰富的可视化支持

free 命令可能会提供更多的可视化选项,如图形化界面或图表展示。

10.4 更完善的 API 支持

为了更好地与其他监控和管理系统集成,free 命令可能会提供更完善的 API 支持。

十一、总结

free 命令作为 Linux 系统中一个基础而强大的工具,其重要性不言而喻。从简单的内存查看到复杂的脚本集成,free 命令都能提供可靠的解决方案。通过本文的详细介绍,我们不仅掌握了 free 命令的基础用法和各种选项,还深入了解了它在脚本中的应用、与其他命令的结合使用、性能考量以及常见问题的解决方法。

free 命令的简洁性和高效性使其成为 Linux 用户和系统管理员的首选工具之一。无论是日常的内存监控、故障排查,还是复杂的性能调优任务,free 命令都能以最小的开销提供最大的便利。它的跨平台兼容性也保证了在不同环境下的稳定使用。

在日常的 Linux 使用和系统管理工作中,free 命令无处不在。它不仅是初学者入门 Linux 的第一课,也是资深用户进行复杂任务时的得力助手。从简单的内存查看到复杂的容量规划,free 都能以其简洁优雅的方式满足需求。

记住,掌握 free 命令不仅仅是学会如何查看内存使用情况,更是理解和构建 Linux 系统资源管理生态的重要一步。在不断探索和实践中,你会发现 free 命令在各种场景下的无限可能性。它就像一个内存状态的观察者,帮助我们在 Linux 世界的旅程中始终保持资源的健康和高效。

以上就是Linux使用free命令查看内存使用情况的方法详解的详细内容,更多关于Linux free查看内存使用情况的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文