在Linux系统中查看CPU占用率有多种方法,以下列举几种常用工具和技巧,结合原理和扩展知识说明:
1. `top` 命令
- 基础用法:直接执行 `top`,首行显示CPU总体占用率(`%Cpu(s)`),包括用户态(`us`)、内核态(`sy`)、空闲(`id`)等状态百分比。
- 交互操作:
- 按 `1` 展开多核CPU的每个核心占用。
- 按 `Shift + P` 按CPU使用率排序进程。
- 扩展知识:`top` 的 `%CPU` 列指单个进程占用的总CPU时间百分比,多核环境下可能超过100%(如400%表示完全占用4核)。
2. `htop` 增强版
- 需要安装(`sudo apt install htop`),界面更直观,支持颜色标注和鼠标操作。
- 直接显示每颗核心的占用率,且可横向滚动查看所有进程的详细资源使用情况。
3. `mpstat`(多核统计)
- 属于 `sysstat` 包,需安装后执行 `mpstat -P ALL 1`,每秒报告每颗CPU核心的使用率。
- 关键指标:`%usr`(用户进程)、`%sys`(系统调用)、`%iowait`(I/O等待)、`%idle`(空闲)。
4. `vmstat` 综合监控
- 执行 `vmstat 1`,`r` 列显示等待CPU的进程数,`us`/`sy` 列显示CPU时间占比。
- 注意:首行为自启动以来的平均值,后续行才是实时数据。
5. `sar` 历史数据分析
- 通过 `sar -u 1 3` 查看实时数据,或 `sar -f /var/log/sa/saXX` 分析历史记录。
- 适合定位周期性性能问题。
6. `nmon` 可视化工具
- 安装后运行 `nmon`,按 `c` 键切换CPU视图,实时显示核心占用及热点进程。
7. `/proc/stat` 原始数据
- 直接读取 `cat /proc/stat`,首行 `cpu` 汇总所有核心的累计时间单位(user/nice/system/idle等)。
- 计算方法:实时计算需采样两次差值,公式为 `使用率 = (1 - (idle2-idle1)/(total2-total1)) * 100%`。
8. `ps` 命令
- `ps -eo pid,comm,%cpu --sort=-%cpu | head` 列出CPU占用最高的进程。
9. 容器环境特殊处理
- Docker容器内需使用 `docker stats` 或读取 `/sys/fs/cgroup/cpuacct.usage`。
扩展知识:
负载 vs CPU使用率:`uptime` 输出的负载平均值(Load Average)包含等待CPU和I/O的进程数,与CPU使用率无直接对应关系。
NUMA架构:多路服务器中,`numastat` 可观察CPU与内存绑定的效率问题。
性能调优:高CPU使用率可能由代码循环、锁竞争或中断风暴(`/proc/interrupts`)导致,需结合 `perf` 或 `strace` 深入分析。