12人参与 • 2026-01-27 • Linux
在 linux 系统中,内存是关键的资源之一,管理和监控内存的使用情况对系统的稳定性和性能至关重要。free 命令是 linux 中用于查看内存使用情况的重要工具,它可以让我们快速了解系统中物理内存和交换分区(swap)的使用状态。
本文介绍 free 命令的输出、各个字段的含义和内存的使用率计算等。帮助更好地理解和管理 linux 系统中的内存资源。
运行 free 命令,系统会输出当前内存的使用情况。常用的 free 命令选项包括:
free:显示内存和交换分区的使用情况。free -h:以人类可读的格式显示(自动选择合适的单位,如 gb、mb)。free -m:以 mb 为单位显示内存使用情况。free -g:以 gb 为单位显示内存使用情况。运行 free -h 命令后,得到如下输出:
free -h
total used free shared buff/cache available
mem: 31g 9.0g 12g 326m 9.8g 21g
swap: 7.9g 3.9g 4.0g
free 命令的输出通常分为两部分:物理内存(mem) 和 交换分区(swap)。它们各自包含几个关键字段,帮助我们了解系统内存的使用情况。
buff/cache,仅仅表示真正被应用程序和系统内核占用的内存。上例中,已使用内存为 9.0gb。tmpfs 或类似机制分配的内存。在上例中,共享内存为 326mb。free 内存和可以随时回收的 buff/cache 内存。上例中,可用内存为 21gb。这个字段比 free 更能准确反映系统的内存可用性。交换分区是当物理内存不足时,linux 将部分内存页交换到硬盘上的区域。交换分区虽然能够帮助系统在内存不足时继续运行,但访问速度远不如物理内存快,频繁使用交换分区可能会影响系统性能。
现代 linux 系统中,used 字段已经排除了缓存和缓冲内存,所以 (used / total) 和((total - free - buff/cache) / total) 本质上是等价的,计算结果几乎相同。
内存使用率 = (used / total) * 100
根据上面的数据:
内存使用率 = (9.0g / 31g) * 100 ≈ 29.03%
内存使用率 = ((total - free - buff/cache) / total) * 100
根据上面的数据:
内存使用率 = ((31g - 12g - 9.8g) / 31g) * 100
= (9.2g / 31g) * 100 ≈ 29.68%
free 命令的结果是四舍五入的,所以结果看起来不一致,可以使用更精确小单位去计算,这里就不展示了。
直接使用 available 字段也可以快速判断系统的内存可用性。available 包含了当前空闲内存、可以快速回收的缓存内存、部分可释放的slab内存,所以这个是参考内存还能使用多少的靠谱指标。内存使用率不是官方定义的,也不是官方标准,只能作为参考。毕竟linux的内存哲学是:空闲内存是浪费的,少不等于不可以用。
交换分区(swap)是物理内存的延伸,当 ram 不足时,系统会将部分不常用的内存页写入交换分区。虽然交换分区可以缓解内存不足的情况,但由于磁盘的速度远低于物理内存,频繁使用交换分区可能会导致系统变慢。
因此,当发现系统频繁使用交换分区时,可能需要考虑增加物理内存,或者优化内存密集型的应用程序。
如何查看 swap 使用情况:
free -h
total used free shared buff/cache available
mem: 31g 9.0g 12g 326m 9.8g 21g
swap: 7.9g 3.9g 4.0g
系统有 7.9gb 的交换分区,其中 3.9gb 已经被使用,剩下 4.0gb 可用。
除了 free 命令的基本用法外,它还提供了多个选项用于不同的场景。可以通过不同的参数组合来获取更精确的内存信息。以下是 free 的一些常用选项及其组合使用方法:
-b:以字节(bytes)为单位显示内存信息。-k:以千字节(kilobytes)为单位显示内存信息。这是默认单位。-m:以兆字节(megabytes)为单位显示内存信息。-g:以千兆字节(gigabytes)为单位显示内存信息。-h:以人类可读(human-readable)格式显示内存信息,自动选择合适的单位(b、kb、mb、gb)。-t:显示内存和交换分区的 总计 信息。使用 -t 选项时,free 会额外添加一行 total,显示物理内存和交换分区的总和。
free -h -t
输出结果:
total used free shared buff/cache available
mem: 31g 9.0g 12g 326m 9.9g 21g
swap: 7.9g 3.9g 4.0g
total: 39g 12g 16g
-s [秒数]:每隔指定的时间间隔(以秒为单位)重复显示内存信息,对于持续监控内存使用情况特别有用。
例:每隔 2 秒打印一次内存使用情况:
free -s 2
输出结果:
total used free shared buff/cache available
mem: 31g 9.0g 12g 326m 9.9g 21g
swap: 7.9g 3.9g 4.0g
total used free shared buff/cache available
mem: 31g 9.0g 12g 326m 9.9g 21g
swap: 7.9g 3.9g 4.0g
……
-c [次数]:与 -s 选项一起使用,用于指定重复显示的次数。
例:每隔 2 秒显示一次内存使用情况,总共显示 5 次:
free -h -s 2 -c 5
-w:显示内存的额外列, 现代系统的默认输出已经相对完整,-w 选项的作用不明显, 默认输出已经是宽模式。-l: 显示低端和高端内存的详细统计信息。在 32 位系统上,它能提供有用的信息,但在 64 位系统上,它的作用可能不大,输出的低端和高端内存数值可能相同。交换分区(swap)可以手动清除(即关闭交换分区)。在某些情况下,想要释放硬盘空间或调整系统性能时,可能需要临时关闭交换分区。
在 linux 中,交换分区可以通过以下命令来清除(关闭):
sudo swapoff -a
swapoff -a:这个命令会关闭系统中所有的交换分区和交换文件。所有在交换分区中的数据会被迁移回物理内存。如果物理内存不足,可能会导致系统性能下降,甚至进程崩溃。
交换分区是物理内存的延伸,当内存不足时,系统会将一些不常用的内存页写入交换分区。如果清除(关闭)交换分区,系统会尝试将这些内容重新加载回物理内存。如果物理内存足够多,通常不会有太大问题,但如果内存不足,可能会导致以下影响:
在大多数 linux 系统中,交换分区在重启后不会被自动清除,而是会自动重新启用。这是因为在系统启动时,/etc/fstab 文件中定义了需要挂载的交换分区或交换文件。系统启动时会根据这个文件自动启用交换分区。
可以通过以下命令查看系统中当前启用的交换分区:
sudo swapon --show
输出结果:
name type size used prio
/dev/dm-1 partition 7.9g 3.9g -1
/dev/dm-1 是一个逻辑卷管理器(lvm)设备,作为交换分区使用。partition 表示该交换空间位于磁盘上的一个分区,而非文件。7.9g 是该交换分区的总大小。3.9g 是当前已使用的交换空间,表明系统内存压力较大,部分数据被写入了交换分区。-1 是交换分区的优先级,表示它的默认优先级较低(可以调整)。如果想让系统在重启后不再启用交换分区,可以编辑 /etc/fstab 文件并注释掉(或删除)与交换分区相关的行。
打开 /etc/fstab 文件:
sudo vim /etc/fstab
找到类似于以下内容的行(具体的设备名称可能不同):
/dev/sda2 swap swap defaults 0 0
注释掉这一行(在行前加上 #):
# /dev/sda2 swap swap defaults 0 0
保存并退出文件。
重启系统后,交换分区将不会再自动启用。如果希望再次启用交换分区,可以取消该行的注释,或者手动运行以下命令启用:
sudo swapon -a
如果希望在系统运行的过程中手动清除交换分区,可以通过以下步骤实现:
关闭交换分区:
sudo swapoff -a
清除所有交换分区中的数据,并将其数据移回物理内存。
如果想要释放交换分区的空间(如删除交换文件),可以在关闭交换后删除对应的交换分区或交换文件。
fdisk 或 gparted 删除交换分区。如果不想永久禁用交换分区,只是临时清除,可以在需要时重新启用:
sudo swapon -a
/etc/fstab 文件中的配置重新启用。/etc/fstab 文件并注释掉与交换分区相关的行。free 命令是 linux 系统中监控内存使用情况的常用工具。理解 free 命令输出中的各个字段,尤其是 used、buff/cache 和 available,对于正确评估系统内存状况至关重要。
核心要点:
free的其他命令选项:free 提供了多种选项来满足不同的内存监控需求,组合使用这些选项可以帮助我们更加灵活和全面地监控系统内存。到此这篇关于深入理解linux内存管理之free命令的使用的文章就介绍到这了,更多相关linux free命令内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论