nodejs守护进程 PM2

发布时间 2023-06-03 18:48:00作者: 摸鱼的云小逸

概述

PM2是用于Node.js应用程序的生产环境进程管理器,内置负载均衡器。它允许你将应用程序持续运行,无需停机重新加载,并简化常见的系统管理任务。

官方网站 Github

特性

  1. 进程管理:PM2 可以启动、停止和重启 Node.js 应用程序进程,确保应用程序一直处于运行状态。它还提供了容错机制,可以在进程崩溃时自动重新启动应用程序。

  2. 负载均衡:PM2 内置了负载均衡器,可以将传入的请求分发到多个 Node.js 进程中,以提高应用程序的性能和可扩展性。负载均衡可以帮助应对高流量和并发请求的情况。

  3. 日志管理:PM2 收集和管理应用程序的日志输出。它可以将日志记录到文件中,并提供了一些日志管理工具,如日志的切割和轮转,以及查看实时日志输出等功能。

  4. 监控和性能分析:PM2 可以监控应用程序的运行状态、CPU 和内存使用情况,以及请求的响应时间等指标。它还提供了性能分析工具,可以帮助你识别和解决性能瓶颈问题。

  5. 部署和自动化:PM2 可以帮助你方便地部署和更新 Node.js 应用程序。它支持自动化部署、代码的自动拉取和更新,以及与其他部署工具的集成。

开始

安装

npm install pm2 -g

启动守护进程

pm2 start app.js

CLI选项

# 指定一个应用程序名称
--name <app_name>

# 监听指定应用程序,当文件改变时重启
--watch

# 设置应用程序重新加载的内存阈值
--max-memory-restart <200MB>

# 指定日志文件
--log <log_path>

# 传递给脚本额外的参数
-- arg1 arg2 arg3

# 自动重新启动之间的延迟
--restart-delay <延迟时间(毫秒)>

# 在日志前面加上时间戳
--time

# 不自动重新启动应用程序
--no-autorestart

# 指定强制重新启动的 cron 表达式
--cron <cron_pattern>

# 附加到应用程序日志
--no-daemon

管理命令

pm2 restart app_name
pm2 reload app_name
pm2 stop app_name
pm2 delete app_name

如果你不想使用app_name管理进程,你可以通过:

  • all 作用于所有进程
  • id 作用于特定的进程 ID

列出托管应用程序

pm2 [list|ls|status]

显示日志

实时显示日志:

$ pm2 logs

挖掘旧日志:

$ pm2 logs --lines 200

pm2.io:监控和诊断 Web 界面

基于 Web 的仪表板,具有诊断系统的跨服务器:

pm2 plus

集群模式

对于 Node.js 应用程序,PM2 包括一个自动负载均衡器,它将在每个衍生进程之间共享所有 HTTP(S)/Websocket/TCP/UDP 连接。

要以集群模式启动应用程序:

$ pm2 start app.js -i max

在此处阅读有关集群模式的更多信息。

生态系统文件

您还可以创建一个称为生态系统文件的配置文件来管理多个应用程序。要生成生态系统文件:

$ pm2 ecosystem

这将生成一个 ecosystem.config.js 文件:

module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }, {
     name: 'worker',
     script: 'worker.js'
  }]
}

并轻松启动它:

$ pm2 start ecosystem.config.js

在此处阅读有关申请声明的更多信息。

设置启动脚本

使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要。要解决这个问题,只需运行此命令以生成一个活动的启动脚本:

$ pm2 startup

并冻结自动重生的进程列表:

$ pm2 save

在此处阅读有关启动脚本生成器的更多信息。

重新启动应用程序更改

使用选项非常简单--watch

$ cd /path/to/my/app
$ pm2 start env.js --watch --ignore-watch="node_modules"

这将在当前目录+所有子文件夹中的任何文件更改时监视并重新启动应用程序,并且它将忽略 node_modules 文件夹中的任何更改--ignore-watch="node_modules"

然后,您可以使用它pm2 logs来检查重新启动的应用程序日志。

更新 PM2

我们让它变得简单,版本之间没有重大变化,过程很简单:

npm install pm2@latest -g

然后更新内存中的 PM2 :

pm2 update