如何利用PM2排查Linux生产环境下Express.js集群的CPU突增问题?
如何通过PM2定位Node.js集群应用的CPU突增问题?
一、实时监控与日志排查
- 启动PM2实时监控:运行
pm2 monit,可实时查看每个集群子进程的CPU、内存占用情况,CPU突增时能快速定位到异常进程。 - 强化请求日志:在Express中添加请求日志中间件,记录每个请求的
请求方法、路由路径、处理耗时,同时在PM2配置文件(如ecosystem.config.js)中指定日志输出路径(out_file和error_file)。CPU突增后,立刻筛选对应时间段的日志,重点排查高频请求或超长耗时请求,初步锁定可疑路由。 - 回溯进程日志:执行
pm2 logs --lines 1000,查看突增时段的日志内容,留意异常请求、错误堆栈或重复执行的后台任务。
二、手动触发CPU快照分析
当观测到CPU突增时,立即对异常进程生成CPU分析快照:
- 执行
pm2 list获取异常进程的ID - 运行
pm2 profile <进程ID>,PM2会调用Node.js内置的--prof工具开始采集CPU数据 - 等待CPU回落至正常水平后,执行
pm2 profile stop <进程ID>停止采集 - 用Node.js自带工具分析生成的日志文件:
node --prof-process <生成的prof文件路径>,报告会明确指出占用CPU时间最多的函数,直接定位到问题代码段。
三、配置PM2自动捕获诊断数据
可以通过PM2配置提前开启诊断能力,避免错过突发问题:
- 修改
ecosystem.config.js,在node_args中添加--prof参数(如node_args: '--prof'),让进程启动时自动开启CPU profiling(会有轻微性能损耗,可根据业务情况调整),问题发生后直接获取完整的profile数据。 - 结合系统脚本(如用
top或ps监控CPU),当进程CPU使用率超过阈值时,自动触发pm2 profile命令生成快照,无需人工干预。
四、结合集群特性缩小排查范围
- 先确认是单个子进程CPU飙升还是所有进程同步异常:单个进程异常大概率是某条请求触发了低效逻辑;所有进程异常则可能是全局定时任务、外部依赖(如数据库锁、第三方服务超时)导致。
- 执行
pm2 show <进程ID>查看进程详情,包括重启次数、最近异常退出记录,判断CPU突增是否与进程崩溃重启相关。
内容的提问来源于stack exchange,提问作者Sujith S Manjavana
相关产品推荐
相关产品推荐

