Linux运维进阶技巧-CPU和内存资源分析
查看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命令和选项来指定查看对应的关键字信息(比如:user、pid、comm、%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和内存使用情况,查看结果如下图所示:

系统概要(上半部分):
- 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资源使用越多。如下图所示:

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

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

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

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

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
查看结果如下图所示:
