在阿里云(国内主流云厂商代表)的 ECS 环境中,云监控(CloudMonitor)本身提供的是基础设施层和操作系统层的宏观指标(如 CPU 使用率、内存占用、网络流量等),它无法直接穿透到进程级别。也就是说,你看到“CPU 飙高”,云监控只会告诉你实例整体负载高,但不会直接显示是哪个 PID 或哪个进程名导致的。
因此,定位具体进程需要采用 “云监控告警触发 -> 远程登录排查 -> 工具链分析” 的组合策略。以下是标准且高效的实操流程:
一、前提配置:确保云监控数据可用
-
安装云监控插件(CloudMonitor Agent)
- 确保 ECS 实例已安装并运行云监控插件。
- 验证方式:控制台 → 云监控 → 主机监控 → 查看实例是否在线。
- 插件默认采集粒度为 1 分钟,适合趋势分析;若需秒级响应,可考虑自定义监控项或结合其他方案。
-
设置合理告警规则
- 针对关键指标(如
cpu_usage、memory_used_percent)设置阈值告警(例如 CPU > 80% 持续 5 分钟)。 - 告警通知渠道建议绑定钉钉/企业微信/短信,确保第一时间感知异常。
- 针对关键指标(如
⚠️ 注意:云监控的指标是聚合值,不能直接用于精确定位进程。它的价值在于快速发现异常时间点。
二、核心步骤:从“知道有问题”到“找到罪魁祸首”
步骤 1:通过云监控确认异常时间窗口
- 登录阿里云控制台 → 云监控 → 主机监控 → 选择对应 ECS 实例。
- 查看 CPU/内存曲线,标记出异常突增的时间段(例如:14:30–14:45 期间 CPU 持续高于 90%)。
- 记录该时间段,后续排查将聚焦于此区间。
步骤 2:远程登录 ECS 实例
- 使用 SSH(Linux)或 RDP(Windows)登录实例。
- 建议使用
sudo权限操作,以便获取完整进程信息。
步骤 3:使用系统工具定位高资源消耗进程
✅ Linux 环境推荐工具组合:
| 工具 | 用途 | 命令示例 |
|---|---|---|
top / htop |
实时查看进程资源占用 | top → 按 P 按 CPU 排序,M 按内存排序 |
pidstat |
历史进程统计(需安装 sysstat) |
pidstat -u -p <PID> 查看某进程历史 CPU |
ps aux --sort=-%cpu |
列出当前 CPU 最高的进程 | ps aux --sort=-%cpu | head -n 10 |
strace / perf |
深入分析进程行为(高级) | strace -p <PID> 跟踪系统调用 |
jstack(Java) |
分析 Java 线程栈 | jstack <PID> > thread_dump.txt |
📌 关键技巧:
- 如果异常是瞬时峰值,可能已在当前时刻消失。此时应依赖历史日志或预置的监控脚本。
- 建议在应用部署时集成轻量级监控X_X(如 Prometheus Node Exporter + Grafana),实现更细粒度监控。
✅ Windows 环境推荐工具:
- 打开任务管理器 → 详细信息 → 按“CPU”或“内存”排序。
- 或使用 PowerShell:
Get-Process | Sort-Object CPU -Descending | Select-Object Name, Id, CPU, WorkingSet64 -First 10
步骤 4:关联业务上下文
- 找到疑似进程后,检查其启动路径、所属用户、启动时间。
- 结合应用日志(如 Nginx access.log、Tomcat catalina.out、MySQL slow query log)判断是否为正常业务高峰或异常请求导致。
- 若是恶意进程(如X_X病毒),通常会出现在
/tmp、/dev/shm等非标准目录,且名称随机。
三、进阶方案:实现自动化进程级监控(推荐生产环境使用)
对于高频异常场景,仅靠人工登录排查效率低下。建议构建以下架构:
方案 A:Prometheus + node_exporter + Alertmanager
- 在 ECS 上部署
node_exporter,暴露更详细的系统指标。 - 使用
process-exporter可监控特定进程组(如所有 java 进程)。 - 配合 Grafana 展示面板,Alertmanager 发送告警。
方案 B:阿里云 SLS(日志服务)+ 云监控
- 开启 ECS 系统日志采集(需安装 Logtail)。
- 编写 SQL 查询语句,关联 CPU 高负载时段与进程启动日志。
- 示例:查找在某分钟内新增的高 CPU 进程。
方案 C:使用阿里云云助手(RunCommand)
- 无需长期开放 SSH 端口,通过云助手下发诊断脚本。
- 脚本内容可包含
ps、top -b -n 1等命令,自动收集快照并上传至 OSS 或 SLS。
四、常见陷阱与注意事项
-
不要依赖云监控做根因分析
云监控只负责“报警”,不负责“诊断”。将其视为哨兵,而非侦探。 -
避免在生产高峰期频繁执行重型排查命令
如strace、perf record会显著增加系统开销,建议在低峰期或使用采样模式。 -
容器化环境需额外处理
若 ECS 运行 Docker/K8s,需进入容器内部或使用 cgroup 工具(如cgexec)定位容器内进程。推荐使用阿里云 ACK 集群自带的监控能力。 -
安全合规提醒
- 排查过程中勿随意终止未知进程,应先备份日志再行动。
- 遵循最小权限原则,使用专用运维账号而非 root 直接操作。
- 所有操作留痕,便于审计。
五、总结流程图
graph TD
A[云监控告警: CPU/内存异常] --> B[确认异常时间窗口]
B --> C[SSH/RDP 登录 ECS]
C --> D{Linux?}
D -->|Yes| E[top/ps/pidstat 定位高占用进程]
D -->|No| F[任务管理器/PowerShell 定位]
E --> G[结合应用日志分析原因]
F --> G
G --> H{是否恶意/异常?}
H -->|是| I[隔离进程/封禁IP/提交工单]
H -->|否| J[优化代码/扩容/调整配置]
I & J --> K[建立长效机制: 部署进程级监控]
六、延伸建议
- 短期:完善云监控告警阈值,确保第一时间发现异常。
- 中期:在关键应用服务器上部署
process-exporter或集成自研探针,实现进程级监控。 - 长期:推动可观测性体系建设,统一接入 Prometheus + Grafana + ELK/SLS,形成闭环。
如需进一步协助,可提供具体异常现象(如 CPU 稳定高位 vs 突发尖峰)、操作系统版本及应用类型,以便给出更精准的排查命令组合。
CLOUD云枢