Linux内存问题排查命令详解

简介: Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。

前言

Linux服务器如果出现程序突然卡得动不了,但是日志没报错,CPU也没跑满,这很有可能就是内存的问题。只要掌握free、vmstat、sar这3个命令,就像给电脑做“体检”一样,几分钟就能定位问题所在。

一、为什么要排查内存?

内存就像服务器的“临时工作台”——程序运行时会把数据放到内存里,方便快速调用。如果内存不够,程序要么“挤不下”崩溃,要么得去磁盘的“备用仓库”(swap)取数据,而磁盘速度比内存慢100倍以上,自然会卡顿。

二、free 命令

free命令是内存排查的“入门款”,能快速知道“总内存有多少、用了多少、还剩多少”,操作最简单。

1. 一行代码搞定

在Linux终端输入以下命令,就能查看内存状态:

free

1.JPG

如果想让结果更“人性化”(比如用GB/MB显示,不用记KB),加-h参数;想每隔几秒刷新一次(比如3秒),加-s 3参数:

free -h -s 3

2.JPG

2. 怎么看懂结果?

free输出的核心字段,每个都像仓库的“收支数据”:

  • Mem:物理内存的“主仓库”,是程序最常用的空间;
    • total:主仓库总容量(比如1.9GB);
    • used:已用容量(比如298MB);
    • free:完全没用到的“空仓库”(比如814MB)——注意:不是“真正可用”,因为还要算缓冲和缓存;
    • buff/cache:“临时存储区”,像仓库的“暂存架”:
      • buff(缓冲区):刚从磁盘接收的数据,先放这整理(比如刚下载的文件碎片),像快递站的“待分拣区”;
      • cache(缓存区):频繁访问的文件/数据,放这方便快速调用(比如常用的程序代码),像家里的“常用物品柜”;
    • available:真正能给新程序用的内存(≈free + buff/cache),比如1.6GB——这个值最重要,低于total 的10%就说明内存快不够了。
  • Swap:内存的“备用仓库”(磁盘空间),主仓库满了才用,速度慢。

3. 实际场景:10秒判断内存够不够

  • 比如用free -h看到available只有100MB(总内存1.9GB),说明内存紧张,可能需要清理缓存或升级内存;
  • 如果Swapused大于0,且持续增加,说明主仓库不够用,已经开始用备用仓库了,得赶紧排查原因。

很多云服务商为了方便新手,会把 used 的数据做成可视化图表,比如非凡云的云服务器管理后台,就能直接看到 used 内存的实时曲线,鼠标放上去还能看到各时间段的具体数值,对不熟悉命令的朋友很友好。

三、vmstat 命令——内存+CPU+IO“全面体检”(推荐)

vmstat就像是服务器的“全面体检报告”——不仅能看内存,还能查CPU、IO的状态,是Linux运维的“明星命令”。

1. 怎么用?定期统计更实用

在终端输入命令,比如“每隔5秒统计一次,共统计3次”:

vmstat 5 3

参数解释:第一个数字(5)是“统计间隔(秒)”,第二个数字(3)是“统计次数”;如果只输vmstat,会只统计一次当前状态。

2. 怎么看懂结果?

vmstat的输出字段多,但按“模块”理解就简单,每个模块对应一个性能维度:
3.JPG

(1)procs:看“进程排队”情况
  • r:正在运行+等待CPU的进程数——如果这个数长期大于服务器CPU核心数(比如4核CPU,r长期大于4),说明CPU不够用,进程要排队;
  • b:等待资源的进程数(比如等内存、等磁盘IO)——这个数大于0说明有进程“卡壳”了。
(2)memory:看内存“主仓库+备用仓库”
  • swpd:备用仓库(Swap)用了多少(KB)——如果这个数大于0,说明主仓库不够用了,开始用备用仓库;长期大于0且增加,就得升级内存或杀无用进程;
  • free:主仓库空容量;
  • buff:缓冲区容量(快递待分拣区);
  • cache:缓存区容量(常用物品柜),如果值非常大说明缓存文件比较多,而如果此时 io 中的 bi 比较小,就说明文件系统效率比较好。
(3)swap:看备用仓库“存取速度”
  • si:每秒从备用仓库(磁盘)读入内存的数据量(KB)——从备用仓库往主仓库运货;
  • so:每秒从内存写入备用仓库的数据量(KB)——主仓库放不下,往备用仓库运货;
    重点:正常情况下si、so都该是0;如果长期大于0(比如持续5分钟都有数值),说明主仓库严重不足,必须解决(升级内存或查内存泄露)。
(4)io:看磁盘“读写速度”
  • bi:每秒从磁盘读入数据量(KB);
  • bo:每秒写入磁盘数据量(KB);
    如果bi+bo很大,且后面的wa(IO等待CPU时间)大于20%,说明磁盘IO是瓶颈,内存再大也会卡顿。
    (5)system:看系统内核“消耗的CPU”
  • in:表示某一时间间隔内观测到的每秒设备终端数。
  • cs:表示每秒产生的上下文切换次数,这个值要越小越好,太大了,就表示你的CPU大部分浪费在上下文切换,CPU没有充分利用,因此要考虑调低线程或者进程的数目。
    注意:这两个值越大,则由内核消耗的CPU就越多。
(6)CPU:看CPU“干活情况”
  • us:用户程序用的CPU时间占比——比如订单系统、网页服务这些业务程序;长期大于50%,要优化程序或算法;
  • sy:系统内核用的CPU时间占比——比如内存管理、磁盘IO这些系统操作;us+sy最好小于80%,否则CPU不够用;
  • id:表示CPU处在空间状态的时间百分比。
  • wa:表示IO等待所占用的CPU时间百分比,大于20%说明IO太慢,拖慢整体速度。引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者监控器的贷款瓶颈(主要是块操作)造成的。

3. 实际场景:找“内存+CPU+IO”的连环瓶颈

比如某服务器用vmstat 5 3发现:swpd=1GB(备用仓库在用)、si=50KB/s(持续读备用仓库)、wa=25%(IO等得久)——说明内存不够,导致用备用仓库,而备用仓库在磁盘,IO又慢,最后CPU等着IO,形成“连环瓶颈”,这时要先加内存,再查磁盘IO。

四、sar 命令——内存状态“定期复查”

sar 命令像内存的“定期复查记录”,功能和free类似,但更适合“长期监控”——比如想每隔3秒看一次内存变化,不用手动刷新,输入命令就能自动持续输出。

1.如何使用?

输入以下命令,每隔3秒输出一次内存信息(按Ctrl+C停止):

sar -r 3

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

2. 结果怎么看?和free“互通”

4.JPG

sar的输出字段和free核心含义一致,比如kbmemfree(空闲内存)、kbmemused(已用内存)、kbbuffers(缓冲区)、kbcached(缓存区),只是显示格式不同,用sar也能快速get内存状态,适合需要“长期观察内存变化”的场景(比如监控某程序运行时的内存消耗)。

五、内存排查思路

按“先整体、再细节、后长期”的思路来,效率更高:

  1. 第一步:用free快速判断“内存够不够”
    先输free -h,看available(可用内存)占比——大于20%说明内存充足;小于10%说明紧张,需要进一步排查。
  2. 第二步:用vmstat找“瓶颈在哪”
    如果free显示内存紧张,输vmstat 5 3,看swap的si/so(是不是备用仓库在用)、procs的r/b(进程有没有排队)、IO的wa(是不是IO拖慢)——定位是纯内存问题,还是内存+CPU/IO的混合问题。
  3. 第三步:用sar做“长期监控”
    如果想跟踪某程序(比如新上线的APP)的内存消耗,输sar -r 3,持续观察内存变化,看程序是否有“内存泄露”(用着用着内存越来越少)。

很多云服务商还会简化这个过程,比如非凡云的Linux服务器,会把核心数据整合到管理后台,不仅有实时图表,还有“内存告警”,手机就能收到提醒。

六、总结

freevmstatsar 这三个命令用途:

  • free 是“快速查看”
  • vmstat 是“全面排查”
  • sar 是“长期监控”
相关文章
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
二、Linux文本处理与文件操作核心命令
|
3月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
298 137
|
3月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
689 57
|
6月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
516 143
linux命令—tree
|
2月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
432 2
|
3月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
281 16
|
5月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
828 13
|
6月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
992 21
|
6月前
|
监控 Linux
Linux系统中使用df命令详解磁盘使用情况。
`df`命令是Linux系统管理员和用户监控和管理磁盘空间使用的重要工具。掌握它的基本使用方法和选项可以帮助在必要时分析和解决空间相关问题。简洁但功能丰富,`df`命令确保了用户可以快速有效地识别和管理文件系统的空间使用情况。
439 13
|
4月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
530 0