Linux运维进阶技巧-CPU和内存资源分析

TOC

查看CPU资源

1.查看CPU硬件信息

查看总体CPU信息
可以使用lscpu命令查看CPU 架构、核心数、线程数、缓存、虚拟化支持、NUMA信息等。

lscpu

查看详细型号信息
在Linux系统中的/proc/cpuinfo文件可以查看CPU的详细信息,还可以结合grep查看对应相关的信息。

cat /proc/cpuinfo

关键字段说明:

  • processor:逻辑 CPU 编号
  • model name:CPU 型号
  • cpu MHz:当前主频
  • cache size:缓存大小
  • flags:支持的指令集(如 vmx 表示支持虚拟化)

查看常用信息(CPU 数量、核心数、线程数)

# 物理 CPU 数量
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
# 每个 CPU 的核心数
cat /proc/cpuinfo | grep "cpu cores" | uniq
# 逻辑 CPU 数量
cat /proc/cpuinfo | grep "processor" | wc -l

2.查看CPU使用情况

使用mpstat命令查看CPU的资源使用情况,不但能查看总体的使用情况,还能分别查看每个逻辑CPU的使用情况。
使用语法:

mpstat 选项 间隔时间 次数

常用选项:

  • -P ALL:显示所有CPU

可查看每个核的%idle%usr%sys%iowait等占比。

【示例】查看CPU使用情况,每1秒刷新,显示5次

mpstat 1 5

结果如下所示:

root@ihavetwocats:~# mpstat 1 5
Linux 5.15.0-106-generic (ihavetwocats)         10/11/2025      _x86_64_        (2 CPU)

04:27:51 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:27:52 PM  all    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   98.99
04:27:53 PM  all    7.61    0.00    2.54    0.00    0.00    0.00    0.00    0.00    0.00   89.85
04:27:54 PM  all    6.97    0.00    3.98    0.00    0.00    0.00    0.00    0.00    0.00   89.05
04:27:55 PM  all    2.02    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   97.47
04:27:56 PM  all    2.53    0.00    3.03    0.00    0.00    0.00    0.00    0.00    0.00   94.44
Average:     all    3.93    0.00    2.12    0.00    0.00    0.00    0.00    0.00    0.00   93.95

补充说明:如果不加次数参数默认会一直进行实时监测数据,跟ping命令一样。

free查看内存资源

free是Linux 中查看系统内存使用情况 的核心命令之一,输出内容简洁直观。下面是详细讲解,包括命令作用、常用选项、字段解释等内容。用于显示系统内存(RAM)和交换空间(swap)的使用情况,包括:已用内存空闲内存以及缓存(cache)缓冲(buffer)占用还有总计内存可用内存
使用语法:

free 选项

【示例】查看内存资源使用情况

free -h

查看结果如下所示:

        total       used      free    shared   buff/cache   available
Mem:    3.3Gi       2.4Gi     109Mi   3.0Mi       828Mi       658Mi
Swap:    2Gi         0Mi       2Gi

关键字段说明:
Mem(内存部分)

  • total:系统物理内存总量。
  • used:已使用内存量(不包含可回收缓存部分)。
  • free:完全空闲、尚未使用的内存。
  • shared:被共享内存(如:tmpfs、/dev/shm)使用的空间。
  • buff/cache:缓存(cache)与缓冲区(buffer)所占的内存总和。
  • available:可用内存量,表示在不使用swap的情况下可以立即分配的内存(包含可回收缓存)。

Swap(交换分区部分)

  • total:交换空间(swap)总量。
  • used:已使用的交换空间。
  • free:空闲交换空间。

特别注意:真正能反映系统当前“可用内存”的指标是available字段,而不是free

ps查看CPU和内存信息

ps命令可以查看进程的CPU和内存资源占用情况。可以使用ps -eo命令和选项来指定查看对应的关键字信息(比如:userpidcomm%cpu%mem等)。

ps监测基本使用

使用语法:

ps -eo 关键字1,关键字2,...

【示例1】查看全部进程的CPU使用情况

ps -eo user,pid,comm,%cpu

【示例2】查看全部进程的内存使用情况

ps -eo user,pid,comm,%mem

【示例3】查看全部进程的CPU和内存使用情况

ps -eo user,pid,comm,%cpu,%mem

上面显示结果雷同以下结果,以示例3为例,如下所示:

root@ihavetwocats:~# ps -eo user,pid,comm,%cpu,%mem
USER         PID COMMAND         %CPU %MEM
root           1 systemd          0.1  0.3
root           2 kthreadd         0.0  0.0
root           3 rcu_gp           0.0  0.0
root           4 rcu_par_gp       0.0  0.0
root           5 slub_flushwq     0.0  0.0
root           6 netns            0.0  0.0
......

在平时常用的操作就是根据CPU或内存资源使用进行排序根据CPU或内存资源使用进行排序,我们需要使用--sort=来指定指标进行排序。
【示例4】根据CPU指标进行排序(从大到小)

ps -eo user,pid,comm,%cpu,%mem --sort=-%cpu

【示例5】根据内存指标进行排序(从大到小)

ps -eo user,pid,comm,%cpu,%mem --sort=-%mem

还可以配合head命令来展示CPU或内存资源使用最大的前多少个进程。
【示例6】展示CPU占用最大的前10个进程

ps -eo user,pid,comm,%cpu,%mem --sort=-%cpu |head -10

【示例7】展示内存使用最多的前10个进程

ps -eo user,pid,comm,%cpu,%mem --sort=-%mem |head -10

上面显示结果雷同以下结果,以示例7为例,如下所示:

root@ihavetwocats:~# ps -eo user,pid,comm,%cpu,%mem --sort=-%mem |head -10
USER         PID COMMAND         %CPU %MEM
root      876625 java             0.1 21.8
lxd        20544 mysqld           0.3 20.1
root       21055 minio            0.1 11.2
root     3254042 YDService        1.2  4.6
root         369 systemd-journal  0.0  2.1
root        1221 dockerd          0.1  2.0
root      876628 nginx            0.0  1.2
root     2388747 traefik          0.0  0.9
root     3840677 glances          0.0  0.8

ps常用关键字列表

基本进程信息

关键字 含义 示例输出
pid 进程号(Process ID) 1234
ppid 父进程号(Parent PID) 1
pgid 进程组ID 1234
sid 会话ID 1234
comm 命令名(不含参数) bash
cmd 完整命令(含参数) /usr/bin/python3 script.py
args 同 cmd,显示命令及参数
tty 终端设备 pts/0
user 用户名 root
uid 用户ID 0

用户与组信息

关键字 含义
user 用户名
uid 用户ID
ruser 实际用户
euser 有效用户
group 用户组
gid 组ID
rgid 实际组ID
egid 有效组ID

CPU相关信息

关键字 含义 示例输出
%cpu CPU 使用率(百分比) 12.5
c CPU 使用(短期平均) 0
psr 当前进程运行在哪个 CPU 上 1
time 累计 CPU 使用时间 00:01:02
etime 进程已运行时间(Elapsed Time) 01:23:45
stime 启动时间(Start Time) 10:30:00
lstart 启动时间(完整格式) Mon Oct 11 10:30:00 2025

内存信息

关键字 含义 示例输出
%mem 内存使用率(百分比) 0.3
vsz 虚拟内存大小(KB) 105432
rss 实际使用物理内存(KB) 12480
size 虚拟内存大小(同 VSZ)
maj_flt 主缺页(Major Page Fault)次数
min_flt 次缺页(Minor Page Fault)次数

运行时间与控制信息

关键字 含义
start 启动时间(简短格式)
lstart 启动时间(完整格式)
etime 已运行时间(Elapsed Time)
time 占用CPU总时间
bsdstart BSD 风格启动时间
cputime CPU使用时间总计

状态与标志信息

关键字 含义 示例输出
stat 进程状态(R/S/D/Z/T 等) S
state 同上 S
flags 进程标志位 4
wchan 等待的内核函数名 ep_poll
nlwp 线程数(Number of LWPs) 4
tty 终端设备 pts/0

文件与路径信息

关键字 含义
cwd 当前工作目录
root 根目录(chroot后的)
exe 可执行文件路径
fname 可执行文件名(短名)

优先级与调度信息

关键字 含义 示例输出
pri 优先级(Priority) 20
ni nice 值 0
policy 调度策略(如 RR、FIFO、TS) TS
rtprio 实时优先级(Real-Time Priority)
class 调度类别(如 TS, FF, RR) TS

其他系统字段

关键字 含义
pidns PID 命名空间
utsns 主机命名空间
ipcns IPC 命名空间
mntns 挂载命名空间
netns 网络命名空间
cgroup 所属的 cgroup
sid 会话ID

常用排查工具:top

简单使用和关键字段说明

top使用语法如下:

top 选项

【示例1】动态查看每2秒刷新一次

top -d 2

【示例2】只显示指定用户nginx进程的资源情况

top -u nginx

【示例3】只监控指定PID为1234的进程资源情况

top -p 1234

我们直接使用top命令可以动态查看系统的CPU和内存使用情况,查看结果如下图所示:
linux-advanced.005

系统概要(上半部分):

  • uptime 信息
    • 显示系统运行时间、登录用户数、平均负载(load average)
    • 平均负载三值分别表示最近 1、5、15 分钟 的平均任务数
  • Tasks
    • 总进程数(total)、运行中(running)、休眠中(sleeping)、停止(stopped)、僵尸(zombie)
  • %Cpu(s)
    • 用户态(us):执行用户进程所占CPU百分比
    • 系统态(sy):内核进程所占百分比
    • 空闲(id):CPU空闲时间
    • I/O等待(wa):等待磁盘I/O的时间
    • 软中断(si)与硬中断(hi):中断占比
  • Mem / Swap
    • 总内存、已用、空闲、缓冲和缓存的使用量
    • Swap 用于判断是否频繁换页(swap in/out)

进程信息(下半部分):

  • PID:进程ID
  • USER:所属用户
  • PR / NI:优先级与Nice值
  • VIRT / RES / SHR:虚拟内存、实际占用内存、共享内存
  • %CPU / %MEM:CPU与内存占用百分比
  • TIME+:进程运行的累计CPU时间
  • COMMAND:执行命令名

CPU资源监测

1.切换CPU信息显示方式

我们可以使用t快捷键来使用图形进度条的形式来显示查看CPU的是用情况,当表格占用越多说明CPU资源使用越多。如下图所示:
linux-advanced.006

2.显示所有CPU核心信息

我们还可以通过使用1快捷键来展示每个 CPU 核心的使用情况,CPU的序列号从0开始,比如:cpu0、cpu1、...。如下图所示:
linux-advanced.007

3.进程占用CPU排序

我们可以使用P快捷键使进程对于CPU资源使用情况进行排序(从大到小),在默认的情况下是按照这种方式进行排序的。如下图所示:
linux-advanced.008

内存资源监测

1.切换内存信息显示方式

跟CPU资源一样我们可以切换信息显示方式,我们可以使用m快捷键来切换内存信息用图形的方式来展示。如下图所示:
linux-advanced.009

2.进程占用内存排序

我们可以使用M快捷键来对于内存资源使用情况进行排序(从大到小)。如下图所示:
linux-advanced.010

top命令常用快捷键大全

基本操作

快捷键 功能说明
h 显示帮助信息
q 退出 top
? 与 h 相同,显示帮助菜单
Space 立即刷新一次数据
d / s 修改刷新间隔(默认 3 秒)

显示与布局控制

快捷键 功能说明
1 显示所有 CPU 核心的使用情况
t 切换 CPU 信息显示方式(文本 / 条形图 / 关闭)
m 切换内存和 Swap 显示模式(数值 / 条形图 / 关闭)
Z 打开或关闭彩色显示(Color mode)
b 打开或关闭高亮(bold)显示
l 显示或隐藏负载平均值和运行时间信息
u 只显示某个用户的进程(输入用户名)
H 显示线程(thread)模式(每个线程单独显示)
V 按进程层级显示(tree 视图)
Shift + W 保存当前显示配置到 ~/.toprc(下次启动自动加载)

排序与过滤

快捷键 功能说明
P 按 CPU 占用率排序(默认)
M 按内存占用率排序
T 按累计运行时间排序
N 按 PID 排序
R 反转当前排序顺序(升序 / 降序)
Shift + < / Shift + > 左右切换排序字段
o / O 手动设置筛选条件(如只显示特定字段)

增强版top:htop

htop命令就是增强版的top,使用方法基本一致,在top命令的基础上新增了图形显示界面,更加直观,和一些功能。
htop的特点:

  • 1.更美观的图形界面(彩色柱状图)
  • 2.支持上下左右滚动查看所有进程
  • 3.可直接用键盘或鼠标选择、结束进程
  • 4.实时显示 CPU、内存、Swap各核心占用率

top使用命令如下:

htop
htop -u username   # 只查看某个用户的进程
htop -p 1234       # 只查看指定PID

查看结果如下图所示:
linux-advanced.011