PM2 进程使用 100% CPU 的解决方案

阅读时长 2 分钟读完

背景

在使用 PM2 管理 Node.js 进程时,有时候会出现进程使用 100% CPU 的情况,导致服务器负载过高,甚至可能导致进程 Crash。

原因

造成 PM2 进程使用 100% CPU 的原因有很多,比如代码有死循环,请求量过大等。

解决方案

1. 排查代码问题

首先,我们需要通过排查代码是否存在问题来确定问题所在。可以通过以下步骤来排查:

  1. 关闭 PM2 (pm2 stop all)
  2. 直接启动应用程序 (node app.js),观察进程是否正常运行,有没有异常错误。
  3. 如果进程异常,请通过日志文件或 debug 模式来查找错误。

2. 调整 PM2 配置

如果代码不存在问题,可以尝试通过调整 PM2 配置来解决问题。常见的配置项包括:

  1. max_memory_restart:如果进程使用内存超过指定的值,PM2 会自动重启进程。可以设置该值来防止内存泄漏导致进程 Crash。
  2. watch:如果开启该配置项,PM2 会自动监控文件的变化并重启进程。可以用于开发环境。
  3. instances:可以指定启动多个进程来分担请求,从而减轻单个进程的负载。
  4. max_restarts:可以指定进程 Crash 后的重启次数,避免进程出现异常后频繁重启导致服务器负载过高。

3. 使用 PM2 Monit 监控

如果以上两种方法都不能解决问题,可以通过 PM2 Monit 监控进程,找到 CPU 占用过高的进程,并进行进一步的排查和优化。

可以通过以下步骤来使用 PM2 Monit 监控进程:

  1. 安装 pm2-monit 模块:pm2 install pm2-monit
  2. 启动 PM2 Monit:pm2 monit

实例

以下是一个示例的 PM2 配置,其中包括了 instancesmax_memory_restart 配置项:

-- -------------------- ---- -------
-
  ------- --
    ------- --------
    --------- ---------
    ------------ ----
    --------------------- -------
    -------- ----
  --
-

总结

PM2 进程使用 100% CPU 可能是代码存在问题,也可能是配置不合理所致。通过排查代码和调整 PM2 配置,可以大大减少出现该问题的概率。同时,PM2 Monit 监控工具可以帮助我们更好地定位问题,并进行排查和优化。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a4bfee48841e9894120fcf

纠错
反馈