如何快速定位高 CPU 使用率的进程
在 Linux 系统中快速定位高 CPU 使用率的进程,可以通过以下步骤和工具实现:
---
### **1. 使用 `top` 命令(实时监控)**
```bash
top
```
- **操作步骤**:
1. 执行 `top` 进入实时监控界面。
2. 按键盘 **`P`** 键(大写),按 CPU 使用率从高到低排序。
3. 观察 `%CPU` 列,找到占用率最高的进程(PID 和命令名称)。
- **输出示例**:
```
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 appuser 20 0 2.3g 1.2g 234m S 180.3 6.2 10:23.45 java
5678 root 20 0 12345 6789 1234 R 95.6 0.5 0:12.34 python
```
---
### **2. 使用 `htop`(增强版 `top`,需安装)**
```bash
# 安装 htop(Debian/Ubuntu)
sudo apt install htop
# 安装 htop(CentOS/RHEL)
sudo yum install htop
htop
```
- **优势**:
- 彩色界面,支持鼠标操作。
- 直接按 **`F6`** 选择排序字段(如 `PERCENT_CPU`)。
- 树状视图显示进程层级关系。
---
### **3. 快速列出高 CPU 进程(`ps` + 排序)**
```bash
ps aux --sort=-%cpu | head -n 10
```
- **命令解释**:
- `ps aux`:列出所有进程的详细信息。
- `--sort=-%cpu`:按 CPU 使用率降序排序。
- `head -n 10`:仅显示前 10 个进程。
- **输出示例**:
```
appuser 1234 180.3 6.2 2300000 1.2g ? Ssl 10:23 10:23 java -Xmx...
root 5678 95.6 0.5 12345 6789 ? R 0:12 0:12 python3 app.py
```
---
### **4. 使用 `pidstat`(按进程监控 CPU)**
```bash
# 安装 sysstat(包含 pidstat)
sudo apt install sysstat # Debian/Ubuntu
sudo yum install sysstat # CentOS/RHEL
# 每 2 秒刷新一次,统计 CPU 使用率
pidstat -u 2
```
- **输出关键列**:
- `%usr`:用户态 CPU 使用率。
- `%system`:内核态 CPU 使用率。
- `PID`:进程 ID。
---
### **5. 通过进程 ID(PID)定位程序**
```bash
# 查看进程详细信息(如启动命令、路径)
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem --forest
# 查看进程对应的可执行文件路径
ls -l /proc/<PID>/exe
# 查看进程的工作目录
ls -l /proc/<PID>/cwd
```
---
### **6. 进阶工具(针对复杂场景)**
#### **`perf`(性能分析工具)**
```bash
# 安装 perf
sudo apt install linux-tools-common # Debian/Ubuntu
sudo yum install perf # CentOS/RHEL
# 统计 CPU 使用率最高的函数调用
sudo perf top
```
#### **`atop`(历史记录分析)**
```bash
# 安装 atop
sudo apt install atop # Debian/Ubuntu
sudo yum install atop # CentOS/RHEL
# 查看历史高 CPU 记录
atop -r /var/log/atop/atop_YYYYMMDD
```
---
### **7. 自动化脚本示例**
```bash
#!/bin/bash
# 找出 CPU 使用率超过 50% 的进程
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | awk '$4 > 50 {print}'
```
---
### **总结**
1. **快速定位**:优先使用 `top` 或 `htop` 实时查看并按 CPU 排序。
2. **精确分析**:通过 `ps --sort` 或 `pidstat` 过滤数据。
3. **深度排查**:结合 `perf` 或 `atop` 分析代码级性能问题。
4. **后续处理**:
- **终止进程**:`kill -9 <PID>`(谨慎使用)。
- **优化代码**:针对高 CPU 进程进行性能调优。
- **限制资源**:使用 `cgroups` 或 `systemd` 限制进程 CPU 配额。