Linux 服务器 CPU 与内存占用查看指南:从基础到进阶的命令详解

快小二编导 技术教程

作为一名运维工程师或开发者,日常工作中最常遇到的问题之一就是服务器性能瓶颈排查。而 CPU 与内存作为服务器最核心的硬件资源,其占用情况直接决定了服务的稳定性——高 CPU 使用率可能导致请求响应缓慢,内存不足则会引发进程被 OOM(Out of Memory)杀手终止。

Linux 系统提供了丰富的命令行工具,从基础的 top 到专业的 htop,再到深入内核的 vmstat,每一个工具都有其独特的定位。本文将从基础命令进阶工具,再到实战场景,详细讲解如何精准查看 Linux 服务器的 CPU 与内存占用,帮你快速定位性能问题。

一、基础命令:快速掌握资源占用概况

对于刚接触 Linux 的新手,优先掌握几个基础命令,就能满足 80% 的日常需求。这些命令无需额外安装,系统默认自带,操作简单直观。

1. top:经典的系统资源监控工具

top 是 Linux 系统中最常用的资源监控命令,它以实时动态的方式展示系统整体状态,包括 CPU、内存、进程等关键信息。

如何使用?

直接在终端输入 top 即可启动,界面分为系统概览区进程列表区两部分:

  • 系统概览区(前5行)

    • 第1行:系统时间、运行时间、登录用户数、系统负载(load average: 0.00, 0.01, 0.05 分别代表1分钟、5分钟、15分钟的平均负载,通常建议不超过 CPU 核心数)。
    • 第2行:进程总数(Tasks: 123 total)、运行中(running)、睡眠中(sleeping)、停止(stopped)、僵尸进程(zombie)数量。
    • 第3行:CPU 占用率(%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st):
    • us:用户空间程序占用 CPU 百分比(如应用程序);
    • sy:内核空间(系统调用)占用 CPU 百分比;
    • ni:优先级调整过的用户进程占用 CPU 百分比;
    • id:空闲 CPU 百分比(越低表示 CPU 越繁忙);
    • wa:等待 I/O(如磁盘读写)的 CPU 时间百分比(过高可能是磁盘性能问题);
    • st:被虚拟机窃取的 CPU 时间(云服务器需关注)。
    • 第4-5行:内存与交换空间(Swap)使用情况:
    • Mem: 16384000k total, 8192000k used, 8192000k free, 1024000k buffers(物理内存总量、已用、空闲、缓存);
    • Swap: 8192000k total, 0k used, 8192000k free, 2048000k cached(交换空间总量、已用、空闲、缓存)。
  • 进程列表区:展示每个进程的资源占用,关键列包括:

    • PID:进程 ID;
    • %CPU:进程占用 CPU 百分比;
    • %MEM:进程占用内存百分比;
    • COMMAND:进程名称。

实用快捷键:

  • P:按 CPU 使用率从高到低排序(快速找 CPU 占用最高的进程);
  • M:按内存使用率从高到低排序;
  • k:输入进程 PID 后杀死进程(需谨慎使用);
  • q:退出 top

2. free:专注内存与交换空间详情

如果只需要查看内存和交换空间的使用情况,freetop 更简洁直接。

基础用法:

输入 free,默认以 千字节(KB) 为单位显示:

              total        used        free      shared  buff/cache   available
Mem:        16384000     8192000     4096000       65536     4096000     7864320
Swap:        8192000          0     8192000

更友好的单位:

加上 -h 参数(human-readable),自动转换为 KB/MB/GB 等易读单位:

free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       7.8Gi       3.9Gi        64Mi       3.9Gi       7.5Gi
Swap:          7.9Gi          0B       7.9Gi

关键指标解释:

  • total:物理内存总量;
  • used:已被应用程序直接使用的内存;
  • free:完全未被使用的内存;
  • buff/cache:内核用于缓存文件系统数据的内存(可被回收供应用使用);
  • available实际可被应用程序使用的内存(最关键指标,包含 free 和可回收的 buff/cache)。

3. ps:进程快照查询

top 是实时监控,而 ps进程快照(某一时刻的进程状态),适合快速筛选特定进程。

常用组合:ps aux

ps aux 会列出系统中所有进程的详细信息,包括 CPU、内存占用:

ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168792 10240 ?        Ss   08:00   0:02 /sbin/init
nginx      123  0.3  0.5 234560 45000 ?        S    08:05   0:10 nginx: worker process
mysql      456  1.2 10.3 1234560 834000 ?      Sl   08:08   0:30 /usr/sbin/mysqld

关键列解释:

  • %CPU:进程自启动以来的 CPU 使用率平均值;
  • %MEM:进程占用物理内存的百分比;
  • VSZ:进程占用的虚拟内存大小(KB);
  • RSS:进程占用的物理内存大小(KB,实际使用的内存);
  • STAT:进程状态(如 R 运行中、S 睡眠中、Z 僵尸进程)。

筛选进程:

结合 grep 可以快速找到目标进程,比如查看 nginx 相关进程:

ps aux | grep nginx

二、进阶工具:更直观、更专业的监控体验

基础命令满足日常需求,但当需要更美观的界面、更丰富的功能时,进阶工具会更高效。以下工具需要手动安装,但配置简单,体验更佳。

1. htoptop 的增强版(推荐)

htoptop 的现代化替代品,界面更友好、功能更强大——支持鼠标操作、颜色区分进程状态、横向滚动查看长命令,还能直接通过菜单杀死进程。

安装方法:

  • CentOS/RHEL:yum install htop -y(需先启用 EPEL 源:yum install epel-release -y);
  • Ubuntu/Debian:apt install htop -y

使用体验:

输入 htop 启动后,界面分为头部系统信息进程列表

  • 头部显示 CPU 核心数(不同颜色代表不同状态:蓝色=低优先级进程、绿色=正常进程、红色=内核进程)、内存/交换空间使用进度条;
  • 进程列表默认按 CPU 使用率排序,鼠标点击列标题可切换排序方式;
  • 快捷键 F9 可直接选择信号杀死进程(如 SIGKILL 强制终止),无需输入 PID。

2. vmstat:虚拟内存与系统活动监控

vmstat(Virtual Memory Statistics)主要用于监控系统的虚拟内存、进程、CPU 活动,适合分析系统整体性能趋势,尤其是 I/O 与 CPU 的关系。

基础用法:

输入 vmstat,输出系统整体状态(1次快照):

vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 4096000 102400 4096000    0    0     0     0  100  200  1  1 98  0  0

关键指标解释:

  • procs 区:r(等待运行的进程数,长期大于 CPU 核心数表示 CPU 不足)、b(等待 I/O 的进程数);
  • memory 区:swpd(交换空间使用量)、free(空闲内存)、buff(缓冲区内存)、cache(缓存内存);
  • swap 区:si(从交换空间读入内存的大小,非0表示内存不足)、so(写入交换空间的大小,非0表示内存不足);
  • io 区:bi(从磁盘读入数据量)、bo(写入磁盘数据量);
  • cpu 区:与 top 一致(us/sy/id/wa/st)。

实时监控:

加上时间间隔(如每2秒刷新一次,共刷新5次):

vmstat 2 5

3. iostat:CPU 与磁盘 I/O 关联分析

很多时候,CPU 高占用并非程序本身导致,而是磁盘 I/O 阻塞(比如数据库查询慢导致进程等待)。iostat 可以同时监控 CPU 和磁盘 I/O,帮你找到根因。

安装方法:

iostat 属于 sysstat 包,需先安装:

  • CentOS/RHEL:yum install sysstat -y
  • Ubuntu/Debian:apt install sysstat -y

基础用法:

输入 iostat,查看 CPU 和磁盘 I/O 状态:

iostat
Linux 3.10.0-1160.11.1.el7.x86_64 (localhost.localdomain)   09/20/2024  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.25    0.00    0.00   99.25

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.50         0.00         2.00          0         20

关键指标:

  • %iowait:CPU 等待磁盘 I/O 的时间百分比(过高说明磁盘性能瓶颈);
  • tps:磁盘每秒 I/O 次数;
  • kB_read/s/kB_wrtn/s:磁盘每秒读写数据量。

监控指定磁盘:

比如监控 sda 磁盘的实时状态(每2秒刷新):

iostat -d -x 2 sda

其中 -x 会显示更详细的磁盘指标(如 %util:磁盘繁忙时间百分比,接近100%表示磁盘满负荷)。

4. sar:历史资源使用情况查询

如果服务器突然出现性能问题,需要回溯历史数据(比如1小时前的 CPU 占用),sar 是最佳选择。它会周期性记录系统资源状态,默认保存最近7天的数据。

基础用法:

  • 查看当天 CPU 占用历史(每10分钟一次):
    sar -u
  • 查看昨天14:00-15:00的内存使用情况:
    sar -r -f /var/log/sa/sa20 14:00:00 15:00:00

    (注:sa20 是日期对应的日志文件,比如每月20日的日志)

  • 实时记录 CPU 状态(每10秒一次,共记录5次):
    sar -u 10 5

三、实战场景:如何快速定位性能问题?

掌握命令只是基础,更重要的是结合场景分析。以下是几个常见问题的排查思路:

场景1:CPU 使用率过高

步骤1:用 tophtop 按 CPU 排序,找到占用最高的进程(比如 PID=456mysql)。
步骤2:查看该进程的具体行为:

  • ps aux | grep 456 确认进程名称和启动参数;
  • strace -p 456 跟踪进程的系统调用(比如是否在频繁读写文件或网络);
  • pidstat -u -p 456 1 查看进程的 CPU 细分(用户态/内核态)。
    步骤3:如果是数据库进程(如 MySQL),进一步查看慢查询日志;如果是应用进程,检查代码是否有死循环或资源泄漏。

场景2:内存不足(OOM 杀手触发)

步骤1:用 free -h 查看 available 内存是否过低(比如小于总内存的10%)。
步骤2:用 tophtop 按内存排序,找到内存占用最高的进程。
步骤3:分析进程内存使用是否合理:

  • pmap -x 456 查看进程的内存映射(是否有异常的大内存段);
  • 检查应用是否有内存泄漏(比如 Java 应用用 jmap 分析堆内存)。
    步骤4:临时解决:关闭非必要进程;长期解决:升级内存或优化应用内存占用。

场景3:CPU 空闲但系统响应慢

现象top 显示 %idle 很高,但服务卡顿。
排查:这种情况通常是I/O 阻塞导致。用 iostat 查看 %iowait 是否过高,或 vmstat 查看 b(等待 I/O 的进程数)是否大于0。如果是磁盘 I/O 问题,进一步检查磁盘是否满(df -h)或是否有坏道(smartctl)。

四、总结:工具选择指南

不同工具适用于不同场景,总结如下:

  • 快速查看整体状态top(默认)、htop(推荐,体验更好);
  • 仅看内存free -h
  • 进程快照与筛选ps aux | grep xxx
  • 分析 CPU 与 I/O 关联iostatvmstat
  • 回溯历史数据sar
  • 进程详细内存分析pmappidstat

Linux 系统的资源监控工具看似繁多,但只要掌握核心逻辑——先看整体再聚焦细节,结合场景选择工具,就能快速定位问题。建议将常用命令加入 alias(比如 alias htop='htop -d 2' 让 htop 每2秒刷新),提升日常操作效率。

随机图片

最后提醒:监控工具只是手段,解决性能问题的关键还是理解应用的资源需求——比如数据库需要足够的内存缓存数据,Web 服务器需要足够的 CPU 处理并发请求。只有结合业务场景,才能让监控工具发挥最大价值。

0 15885

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码