服务器内存排查之free、vmstat、sar命令实战教程

 更新时间:2025年11月07日 17:17:46   作者:程序员1970  
这篇文章主要介绍了服务器内存排查之free、vmstat、sar命令的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

在Linux服务器的运维场景中,程序突然卡顿且无日志报错、CPU未跑满的情况时有发生,此时内存问题往往是潜在的“罪魁祸首”。对于开发运维人员而言,掌握free、vmstat、sar这三个命令,就如同为服务器配备了专业的“体检工具”,能够在短短几分钟内精准定位内存相关的故障根源,为高效解决问题提供有力支持。

一、内存排查的必要性

当内存容量充足时,程序能够顺畅运行;然而,一旦内存不足,便会引发一系列问题。一方面,程序可能因无法获取足够的内存空间而崩溃;另一方面,系统不得不借助磁盘的“备用仓库”(即swap分区)来存储和读取数据。但磁盘的读写速度相较于内存而言,慢了100倍以上,这种速度差异必然导致程序出现明显的卡顿现象,严重影响服务器的性能和用户体验。

二、free命令:内存排查的“入门利器”

free命令堪称内存排查领域的“入门款”工具,它能够快速提供关于内存使用情况的基本信息,让用户迅速了解服务器的内存状态。

(一)简单操作与灵活参数

在Linux终端中,只需输入“free”命令,即可查看内存的初始状态。若希望结果以更人性化的GB/MB为单位显示,避免记忆KB数值的繁琐,可添加“-h”参数;若想实现每隔一定时间(如3秒)自动刷新内存信息,可添加“-s 3”参数。具体命令如下:

free -h -s 3

(二)结果解读:洞察内存“收支”

free命令输出的结果包含多个核心字段,每个字段都如同仓库的“收支数据”,反映了内存的不同使用情况:

  • Mem(物理内存主仓库):这是程序最常用的内存空间,类似于实际工作中的主要工作区域。
    • total:表示主仓库的总容量,例如1.9GB,反映了服务器物理内存的总量。
    • used:显示已使用的内存容量,如298MB,体现了当前正在被程序占用的内存大小。
    • free:代表完全未被使用的“空仓库”容量,例如814MB。但需要注意的是,这个值并非真正可用的内存,因为还需要考虑缓冲和缓存所占用的空间。
    • buff/cache(临时存储区):这部分内存类似于仓库的“暂存架”,用于临时存储数据。
      • buff(缓冲区):刚从磁盘接收的数据会先存放在这里进行整理,类似于快递站的“待分拣区”。例如,刚下载的文件碎片会暂时存储在缓冲区,等待进一步处理。
      • cache(缓存区):频繁访问的文件或数据会被存放在这里,以便快速调用,类似于家里的“常用物品柜”。例如,常用的程序代码会被缓存在此,提高程序运行效率。
    • available(真正可用内存):这是最为关键的指标,其值大约等于free + buff/cache,例如1.6GB。当这个值低于total的10%时,就表明内存已经接近耗尽,需要及时采取措施。
  • Swap(内存备用仓库):这是磁盘上划分的专门空间,作为内存的备用区域。只有当主仓库(物理内存)满载时,系统才会使用Swap分区。但由于磁盘速度远慢于内存,使用Swap分区会导致性能下降。

(三)实际场景应用:快速判断内存状况

通过free命令,运维人员可以在10秒内快速判断内存是否充足。例如,当使用“free -h”命令查看结果时,如果发现available值只有100MB(而总内存为1.9GB),这就表明内存已经非常紧张,可能需要清理缓存或考虑升级内存。另外,如果Swap的used值大于0,并且持续增加,这说明主仓库的内存已经不够用,系统开始频繁使用备用仓库,此时必须尽快排查原因,避免问题进一步恶化。

三、vmstat命令:内存+CPU+IO的“全面体检专家”

vmstat命令犹如服务器的“全面体检报告”,它不仅能够提供内存的使用情况,还能同时监测CPU和IO的状态,是Linux运维领域中备受推崇的“明星命令”。

(一)使用方法:定期统计,精准把握

在终端中输入“vmstat”命令,默认会统计一次当前的系统状态。若希望实现定期统计,例如每隔5秒统计一次,共统计3次,可使用以下命令:

vmstat 5 3

其中,第一个数字“5”表示统计间隔(秒),第二个数字“3”表示统计次数。通过定期统计,可以更准确地观察系统性能的变化趋势。

(二)结果解读:按模块剖析性能维度

vmstat的输出字段较多,但按照不同的性能维度进行模块划分后,理解起来就变得相对简单。

  • procs(进程排队情况)
    • r:表示正在运行以及等待CPU的进程数。如果这个数值长期大于服务器的CPU核心数(例如,服务器为4核CPU,而r长期大于4),则说明CPU资源不足,进程需要排队等待处理。
    • b:代表等待资源的进程数,这些资源可能包括内存、磁盘IO等。如果这个数值大于0,说明有进程因为资源不足而“卡壳”,无法正常执行。
  • memory(内存主仓库+备用仓库)
    • swpd:显示备用仓库(Swap)已经使用的空间大小(单位:KB)。如果这个数值大于0,说明主仓库的内存已经不够用,系统开始使用备用仓库。如果swpd长期大于0且持续增加,就需要考虑升级内存或者终止一些无用的进程。
    • free:表示主仓库的空闲内存容量。
    • buff:缓冲区容量,类似于数据整理的“待分拣区”。
    • cache:缓存区容量,类似于存放常用物品的“常用物品柜”。如果cache的值非常大,而io中的bi值比较小,说明文件系统的缓存效率较高,能够有效地减少磁盘IO操作。
  • swap(备用仓库存取速度)
    • si:每秒从备用仓库(磁盘)读入内存的数据量(单位:KB),即从备用仓库往主仓库运输数据。
    • so:每秒从内存写入备用仓库的数据量(单位:KB),即主仓库放不下数据时,往备用仓库运输数据。正常情况下,si和so的值都应该为0。如果这两个值长期大于0(例如持续5分钟都有数值),说明主仓库的内存严重不足,必须采取措施解决,如升级内存或检查是否存在内存泄漏问题。
  • io(磁盘读写速度)
    • bi:每秒从磁盘读入的数据量(单位:KB)。
    • bo:每秒写入磁盘的数据量(单位:KB)。如果bi + bo的值很大,并且后面的wa(IO等待CPU时间)大于20%,说明磁盘IO成为了系统的瓶颈,即使内存容量足够,也会导致系统出现卡顿现象。
  • system(系统内核消耗的CPU)
    • in:表示某一时间间隔内观测到的每秒设备终端数。
    • cs:表示每秒产生的上下文切换次数。这个值越小越好,如果值过大,说明CPU大部分时间浪费在上下文切换上,没有得到充分利用。此时,需要考虑调低线程或者进程的数目,以提高CPU的使用效率。需要注意的是,in和cs的值越大,由内核消耗的CPU就越多。
  • CPU(CPU干活情况)
    • us:用户程序使用的CPU时间占比,例如订单系统、网页服务等业务程序。如果这个值长期大于50%,说明用户程序对CPU的占用过高,可能需要优化程序或算法。
    • sy:系统内核使用的CPU时间占比,例如内存管理、磁盘IO等系统操作。us + sy的值最好小于80%,否则说明CPU资源不足,无法满足系统运行的需求。
    • id:表示CPU处于空闲状态的时间百分比。
    • wa:表示IO等待所占用的CPU时间百分比。如果wa大于20%,说明IO操作过慢,拖慢了整个系统的速度。引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者监控器的带宽瓶颈(主要是块操作)导致的。

(三)实际场景应用:破解“内存+CPU+IO”连环瓶颈

例如,某服务器使用“vmstat 5 3”命令进行监测,发现swpd = 1GB(备用仓库正在使用)、si = 50KB/s(持续从备用仓库读入数据)、wa = 25%(IO等待时间较长)。这一系列数据表明,服务器内存不足,导致系统开始使用备用仓库。而备用仓库位于磁盘,磁盘IO速度较慢,进而使得CPU需要等待IO操作完成,形成了“内存不足→使用备用仓库→磁盘IO慢→CPU等待”的连环瓶颈。在这种情况下,首先需要增加服务器的内存容量,然后再检查磁盘IO的性能,进行相应的优化。

四、sar命令:内存状态的“定期复查记录”

sar命令类似于内存的“定期复查记录”,它与free命令功能类似,但更适合用于“长期监控”。例如,如果希望每隔3秒查看一次内存变化情况,无需手动刷新,sar命令可以自动持续输出内存信息。

(一)使用方法:持续监控,轻松掌握

在终端中输入以下命令,即可实现每隔3秒输出一次内存信息,按Ctrl + C组合键可以停止监控:

sar -r 3

其中,参数“-r”表示查看内存使用率相关统计,后面的“3”是统计间隔(秒)。

(二)结果解读:与free“互通有无”

在这里插入图片描述

sar命令的输出字段和free命令的核心含义一致,例如kbmemfree(空闲内存)、kbmemused(已用内存)、kbbuffers(缓冲区)、kbcached(缓存区)等,只是显示格式有所不同。通过sar命令,用户可以快速了解服务器的内存状态,特别适合需要“长期观察内存变化”的场景,例如监控某程序运行时的内存消耗情况。

五、内存排查思路:高效定位问题的“三步法”

为了提高内存排查的效率,可以按照“先整体、再细节、后长期”的思路进行操作:

(一)第一步:用free快速判断“内存够不够”

首先输入“free -h”命令,查看available(可用内存)的占比情况。如果available值大于总内存的20%,说明内存充足;如果小于10%,则表明内存紧张,需要进一步深入排查。

(二)第二步:用vmstat找“瓶颈在哪”

如果free命令显示内存紧张,接下来输入“vmstat 5 3”命令,仔细观察swap的si/so(判断是否在使用备用仓库)、procs的r/b(查看进程是否排队)、IO的wa(确定是否因IO拖慢系统)等指标。通过这些数据,可以定位问题究竟是单纯的内存问题,还是内存与CPU/IO混合导致的问题。

(三)第三步:用sar做“长期监控”

如果想跟踪某程序(例如新上线的APP)的内存消耗情况,输入“sar -r 3”命令,持续观察内存的变化趋势。通过长期监控,可以判断程序是否存在“内存泄漏”问题,即程序在运行过程中内存使用量逐渐增加,最终导致内存耗尽。

六、总结

free、vmstat、sar这三个命令在服务器内存排查中各有其独特的用途:

  • free命令主要用于“快速查看”服务器的内存使用情况,为用户提供一个初步的内存状态评估。
  • vmstat命令则擅长“全面排查”,能够同时监测内存、CPU和IO等多个性能指标,帮助用户深入分析系统性能瓶颈。
  • sar命令适用于“长期监控”,可以持续跟踪内存的变化情况,对于发现潜在的内存问题具有重要意义。

到此这篇关于服务器内存排查之free、vmstat、sar命令实战的文章就介绍到这了,更多相关服务器内存排查free、vmstat、sar命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux分析服务器内存常用命令与查找文件工作路径方式

    linux分析服务器内存常用命令与查找文件工作路径方式

    文章介绍了如何使用`auditd`服务查看内存使用情况,并通过`ps`命令按内存使用排行,此外,还说明了通过进程的工作目录(cwd)来定位文件位置,从而确定服务的具体位置
    2025-10-10
  • 源码安装apache脚本部署过程详解

    源码安装apache脚本部署过程详解

    这篇文章主要介绍了源码安装apache脚本部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Linux下实时获取WiFi与热点状态的方法详解

    Linux下实时获取WiFi与热点状态的方法详解

    在智能设备开发中,网络状态感知是基础而关键的功能,本文将手把手教你用Qt在Linux环境下实现热点和无线网络状态的检测,需要的朋友可以参考下
    2025-08-08
  • Linux下安装Hadoop集群详细步骤

    Linux下安装Hadoop集群详细步骤

    大家好,本篇文章主要讲的是Linux下安装Hadoop集群详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • linux网络NAT配置方式详解

    linux网络NAT配置方式详解

    这篇文章主要为大家详细介绍了linux网络NAT配置方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • LNMP系列教程之 设置404错误页面

    LNMP系列教程之 设置404错误页面

    在之前的文章中分享到”设置301重定向的方法“文章,提到301,那肯定也要说说404错误页面吧。因为我们默认安装了LNMP后404页面不会自动设置,也不会默认到程序的404错误页面,而需要我们手工设置
    2012-09-09
  • Linux 挂载磁盘详解及实操步骤

    Linux 挂载磁盘详解及实操步骤

    Linux中挂载磁盘是一项重要的操作,可以用于扩展存储空间,管理数据文件,备份和存储重要文件等,本文将详细介绍Linux系统中挂载磁盘的相关概念、步骤和实际操作指南
    2023-06-06
  • linux修改ssh默认端口实现方式

    linux修改ssh默认端口实现方式

    文章介绍了如何修改SSH默认端口,步骤包括修改配置文件、重启服务以及测试新端口,还提到了SSH配置文件的顺序和使用方法
    2025-11-11
  • 使用Putty远程(SSH)管理Linux VPS的图文教程

    使用Putty远程(SSH)管理Linux VPS的图文教程

    Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。
    2010-12-12
  • 解决shell无法执行的问题

    解决shell无法执行的问题

    这篇文章主要介绍了解决shell无法执行的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论