0

0

如何在Linux中查看内存使用情况?使用free命令检查内存占用状态

絕刀狂花

絕刀狂花

发布时间:2025-09-05 13:04:01

|

558人浏览过

|

来源于php中文网

原创

free命令中buff/cache是可回收的缓存内存,available才是真实可用内存;当available低时需排查内存问题,可通过htop、ps、vmstat等工具分析进程内存占用及系统内存行为。

如何在linux中查看内存使用情况?使用free命令检查内存占用状态

说起在Linux系统里看内存用量,我个人觉得最省事、也最直观的,就是那个老伙计

free
命令了。它能一下子把当前系统的内存和交换空间(Swap)情况都摊开给你看,挺方便的。通过它,你就能快速了解物理内存和交换空间的总量、使用量、空闲量以及缓存情况。

当你需要在Linux系统里快速摸清内存状况时,

free
命令无疑是首选。它简单粗暴,但信息量十足。我通常会加上
-h
参数,这样显示出来的数据更易读,比如G、M、K这种单位,省得自己换算。

敲下

free -h
回车后,你会看到类似这样的输出:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       5.0Gi       3.0Gi       1.0Gi       7.0Gi        9.0Gi
Swap:         2.0Gi       0.0Gi       2.0Gi

这里面,

total
就是系统总的物理内存大小,这个没啥疑问。
used
是当前被各种程序占用的内存,这个也不是全部,因为它不包括
buff/cache
里的东西。
free
就是完全空闲的内存,这部分通常不会太多,因为Linux系统很聪明,它会尽量把内存用起来做缓存,提高效率。

重点来了,

shared
是共享内存,这块通常是进程间通信用的。而
buff/cache
,这可是个大头!它包含了内核缓冲区(buffer)和页面缓存(cache)。系统会把磁盘上的数据缓存到这里,这样下次再读相同数据就快多了。别看它被占用了,但当程序需要内存时,这部分内存是可以被回收利用的。所以,
buff/cache
大不代表内存紧张,反而说明系统在高效利用资源。

available
这个字段,在比较新的
free
版本里才有,它才是真正意义上“可用”的内存。它包含了
free
的内存,以及可以被回收的
buff/cache
内存。所以,判断系统内存是否吃紧,看
available
比看
free
要靠谱得多。如果
available
很低,那才真的要警惕了。

最后是

Swap
,交换空间。这相当于一块硬盘上的“虚拟内存”,当物理内存不够用时,系统会把不常用的数据暂时挪到这里。
used
高说明系统在频繁使用交换空间,这通常意味着物理内存已经捉襟见肘,性能可能会受影响。

如何正确理解
free
命令输出中的
buff/cache
available
字段?

我发现很多刚接触Linux的朋友,一看

free
命令输出,会觉得
free
内存怎么这么少,是不是系统快挂了?其实这是一种误解,主要就出在对
buff/cache
available
的理解上。
buff/cache
就像系统的一个大仓库,里面放着它觉得将来可能会用到的数据(cache),以及它在处理I/O操作时暂时存放数据的地方(buffer)。这些内存虽然被占用了,但它们不是被某个特定程序“锁死”了的,而是可以随时被操作系统回收并分配给需要内存的程序。所以,
buff/cache
越大,往往说明系统在高效地利用内存来加速文件读写,这反而是件好事。

TalkMe
TalkMe

与AI语伴聊天,练习外语口语

下载

available
字段的引入,就是为了解决这个误解。它给出了一个更真实的“可用内存”估值。它不仅仅是把
free
那部分算进去,还会加上那些可以被快速回收的
buff/cache
内存。所以,当你看到
free
内存很少,但
available
还很高的时候,大可不必担心。这说明系统还有充足的内存储备,只是它把这些内存用作了缓存,以提高整体性能。只有当
available
的值持续走低,甚至接近于零时,才真正需要考虑是不是内存不足了。

当Linux系统内存不足时,我该如何排查并定位问题?

如果你通过

free -h
观察到
available
内存持续偏低,甚至
Swap
使用量也开始飙升,那确实是个警示信号了。这时候,我通常会用几个命令组合拳来排查:
top
htop
是我的首选。它们能实时显示各个进程的CPU、内存占用情况。特别是
htop
,界面更友好,可以很方便地按内存占用排序,一眼就能看出哪个进程是“内存大户”。

比如,我可能会先运行

htop
,然后按
F6
选择
MEM%
排序,看看是哪个应用或者服务占用了过多的内存。有时候,可能是某个程序出现内存泄漏,或者配置不当导致它申请了远超实际需求的内存。除了
top
/
htop
ps aux --sort=-%mem
也能列出所有进程并按内存百分比降序排列,这在脚本里做自动化监控时特别有用。

定位到具体进程后,下一步就是分析了。是正常负载导致的?还是程序bug?或者仅仅是缓存太多了?如果是缓存,可以尝试清理一下:

sync; echo 1 > /proc/sys/vm/drop_caches
(清理页面缓存),或者
echo 2 > /proc/sys/vm/drop_caches
(清理目录项和inode缓存),
echo 3 > /proc/sys/vm/drop_caches
(清理所有)。但请注意,清理缓存只是临时手段,治标不治本,而且可能会影响系统性能,所以非必要不推荐频繁操作。关键还是找出内存消耗的根本原因。

除了
free
命令,还有哪些工具可以帮助我更深入地监控Linux内存状况?

虽然

free
命令很棒,但它毕竟只是一个快照。在需要持续监控或者更细致分析内存使用模式时,我还会用到一些其他工具。比如,
vmstat
命令就能提供关于虚拟内存、进程、I/O等方面的统计信息,而且是动态更新的。通过
vmstat 1
,你可以每秒看到一次系统的内存、交换空间、CPU活动等变化,这对于观察内存压力下的系统行为非常有帮助。它会显示
swpd
(已使用的交换内存)、
free
(空闲内存)、
buff
(缓冲区)、
cache
(缓存)等,虽然和
free
的输出略有不同,但能提供一个时间序列的视角。

另外,

proc
文件系统本身就是个宝库。
cat /proc/meminfo
会提供比
free
命令更详细的内存信息,包括各种内核级别的内存统计,比如
MemTotal
MemFree
Buffers
Cached
SwapTotal
SwapFree
等等,甚至还有Slab、PageTables等更底层的数据。如果你需要编写监控脚本或者进行深度分析,
/proc/meminfo
是不可或缺的数据源。对于更复杂的场景,例如分析单个进程的内存映射(Memory Map),
pmap -x 
命令就能派上用场,它能显示一个进程的内存使用详情,包括共享库、堆、栈等区域的占用情况。这些工具结合起来,能让你对Linux系统的内存状况有一个全面而深入的理解。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

386

2023.09.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

3

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号