Appearance
free 命令:内存使用情况分析的得力助手
1. 命令简介
free
是一个重要的 Linux 命令行工具,用于显示系统中可用和已用的物理内存及交换内存(swap space)的总量。它从 /proc/meminfo 文件中读取信息,提供了一个快速查看系统内存使用状况的方法。对于系统管理员和开发人员来说,这是一个监控系统资源、诊断内存相关问题的关键工具。
2. 基本语法
bash
free [选项]
3. 常用选项详解
-h
或--human
: 以人类可读的格式显示大小(如 B, K, M, G)-b
,-k
,-m
,-g
: 分别以 Bytes, KB, MB, GB 为单位显示-s N
或--seconds N
: 每 N 秒重复显示一次-c N
或--count N
: 重复显示 N 次后退出-w
或--wide
: 宽输出模式-t
或--total
: 显示内存总和的行--si
: 使用 1000 而不是 1024 作为进位的基数
4. 基础用法示例
4.1 显示系统内存使用情况
bash
free -h
输出示例:
total used free shared buff/cache available
Mem: 15Gi 4.7Gi 5.8Gi 1.1Gi 4.9Gi 9.0Gi
Swap: 2.0Gi 0B 2.0Gi
4.2 以兆字节为单位显示内存使用情况
bash
free -m
输出示例:
total used free shared buff/cache available
Mem: 16024 4815 5942 1129 5266 9248
Swap: 2048 0 2048
4.3 每 5 秒更新一次内存使用情况,共显示 3 次
bash
free -h -s 5 -c 3
5. 高级用法和技巧
5.1 显示详细的内存统计信息
bash
free -w
这会显示一个额外的 "available" 列,表示可用于启动新应用的估计内存量。
5.2 计算实际使用的内存百分比
bash
free | grep Mem | awk '{print $3/$2 * 100.0}'
这将输出实际使用的内存百分比。
5.3 监控内存使用变化
bash
watch -n 1 free -m
这将每秒更新一次内存使用情况。
6. 实际应用场景
6.1 内存使用监控脚本
bash
#!/bin/bash
# memory_monitor.sh
THRESHOLD=80 # 设置内存使用阈值为 80%
LOG_FILE="/var/log/memory_usage.log"
while true; do
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
DATE=$(date +"%Y-%m-%d %H:%M:%S")
echo "$DATE - Memory Usage: $MEMORY_USAGE%" >> $LOG_FILE
if (( $(echo "$MEMORY_USAGE > $THRESHOLD" | bc -l) )); then
echo "$DATE - WARNING: Memory usage exceeded $THRESHOLD%" >> $LOG_FILE
# 在这里可以添加告警逻辑,如发送邮件或执行其他操作
fi
sleep 300 # 每 5 分钟检查一次
done
这个脚本持续监控内存使用情况,当使用率超过阈值时记录警告信息。
6.2 系统资源报告生成器
bash
#!/bin/bash
# system_resource_report.sh
REPORT_FILE="system_resource_report_$(date +%Y%m%d).txt"
echo "System Resource Report - $(date)" > $REPORT_FILE
echo "=======================================" >> $REPORT_FILE
echo -e "\nMemory Usage:" >> $REPORT_FILE
free -h >> $REPORT_FILE
echo -e "\nTop 5 Memory-Consuming Processes:" >> $REPORT_FILE
ps aux --sort=-%mem | head -n 6 >> $REPORT_FILE
echo -e "\nSwap Usage:" >> $REPORT_FILE
swapon --show >> $REPORT_FILE
echo -e "\nAvailable Memory Over Time:" >> $REPORT_FILE
for i in {1..5}; do
free -h | grep Mem | awk '{print $7}' >> $REPORT_FILE
sleep 2
done
echo "Report generated: $REPORT_FILE"
这个脚本生成一个系统资源报告,包括内存使用情况、最耗内存的进程和交换空间使用情况。
7. 性能考虑
free
命令本身对系统性能影响很小,可以频繁运行。- 但是,过于频繁地记录或分析
free
的输出可能会导致不必要的 I/O 操作。 - 在大型系统上,考虑使用更高级的监控工具来补充
free
命令。
8. 安全注意事项
free
命令不会直接影响系统安全,但它显示的信息可能被用于系统指纹识别。- 在多用户系统中,普通用户也可以使用
free
命令,这通常不会造成安全问题。 - 在生产环境中,避免在公开可见的脚本中硬编码内存使用阈值等敏感信息。
9. 与其他工具的集成
- 与
top
或htop
结合使用可以获得更全面的系统资源使用视图。 - 可以与
sar
(System Activity Reporter) 结合使用来长期监控系统性能。 - 在 shell 脚本中,经常与
awk
和grep
等命令一起使用来提取特定信息。
10. 故障排除
- 如果
free
命令显示的可用内存很少,但系统似乎运行正常,可能是因为 Linux 内核会将未使用的内存用作磁盘缓存。 - 在虚拟化环境中,
free
显示的信息可能不完全准确,因为虚拟化可能会影响内存报告。 - 如果
free
命令无法运行,检查 /proc/meminfo 文件是否存在和可读。
11. 相关命令
top
: 提供实时的系统资源使用情况vmstat
: 报告虚拟内存统计信息ps
: 报告当前进程状态swapon
: 显示交换空间使用情况/proc/meminfo
: 包含详细的内存使用信息的文件
通过深入理解和灵活运用 free
命令,系统管理员和开发人员可以更好地监控和管理系统内存资源,及时发现潜在的内存问题,优化系统性能。