在 Node.js 开发中,我们经常需要通过启动多个进程来满足并发处理的需求,这个时候就需要一个进程管理器来帮助我们管理这些进程。PM2 就是一个非常好用的进程管理器,它可以让我们的 Node.js 应用运行更加顺畅。在本文中,我们将介绍 PM2 进程管理器的高级用法,帮助你更好地掌握它的使用。
什么是 PM2?
PM2 是一个 Node.js 进程管理器,它可以简化 Node.js 应用的部署和管理。它可以监控应用程序并在发生错误时立即重新启动应用程序,还可以在应用程序崩溃时自动重启应用程序。
PM2 的基本用法
在开始介绍 PM2 进程管理器的高级用法之前,我们先来了解一下 PM2 的基本用法。使用 PM2 启动 Node.js 应用非常简单,只需要在应用所在的目录下运行以下命令即可:
pm2 start app.js
这个命令将启动一个名为 app.js
的 Node.js 应用。如果你想启动更多的进程,只需将命令改为:
pm2 start app.js -i 4
这个命令将启动 4 个进程来处理应用。PM2 会自动将这些进程均匀地分配在服务器的不同 CPU 核心上,从而最大化地利用服务器的 CPU 资源。
集群模式
在前面介绍 PM2 的基本用法时,我们介绍了如何使用 -i
参数来启动多个进程。这种方式被称为“非集群模式”,在这种模式下,每个进程都是独立的,它们之间没有任何通信。
除了非集群模式之外,还有一种称为“集群模式”的方式。在集群模式下,所有的进程都是共享一个端口,它们之间可以通过共享内存来进行通信。集群模式通常用于处理长连接,例如 WebSocket、Socket.io 等服务。
要在集群模式下启动 PM2,可以使用以下命令:
pm2 start app.js -i 4 --name "my-app" --exp-backoff-restart-delay=100
这个命令将启动一个名为 my-app
的应用,并使用 4 个进程来处理请求。这个应用将共享一个端口,并且在发生错误时将等待 100 毫秒后再进行重启。使用集群模式时,我们通常还需要使用sticky-session
和cluster
库来确保请求可以正确地分配到相应的进程上。示例如下:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - ---------------- ----- ------- - ---------------------------- ----- ------ - -------------------------- -- ------------------ - ------------------- -------------- -- ---------- --- ---- - - -- - - -------- ---- - --------------- - ------------------ -------- ----- ------- -- - ------------------- --------------------- ------- --------------- --- - ---- - ----- ------ - ----------------------- ---- -- - ------------------- -------------- ---------- --- --------------------- ----- -- -- - ------------------- -------------- ---------- --- -
配置文件
PM2 进程管理器还支持使用配置文件来管理应用程序的启动和部署。下面是一个简单的 PM2 配置文件的例子:
{ "name": "my-app", "script": "app.js", "instances": 2, "max_memory_restart": "150M" }
这个配置文件告诉 PM2 启动一个名为 my-app
的应用,并使用 app.js
作为应用程序的入口文件。它还指定了需要启动两个进程,并设置了进程的内存使用阈值,当进程占用的 RAM 超过 150M 时,PM2 会自动重新启动进程。
要使用 PM2 配置文件来管理应用程序的部署,我们可以使用以下命令:
pm2 start pm2.config.js
这个命令将使用 pm2.config.js
文件中的配置参数来启动应用程序。
环境变量
在 Node.js 应用程序中,我们通常会使用环境变量来配置应用程序的行为。同样的,PM2 进程管理器也支持环境变量的配置。
要在 PM2 进程管理器中设置环境变量,我们可以使用以下命令:
pm2 start app.js --env production
这个命令将启动一个名为 app.js
的 Node.js 应用,并将环境变量设置为 production
。在应用程序中,我们可以使用以下代码来获取环境变量:
const env = process.env.NODE_ENV;
日志管理
PM2 进程管理器还自带了一个非常方便的日志管理功能。PM2 可以将应用程序的输出重定向到日志文件中,从而方便我们查看应用程序的运行情况。
默认情况下,PM2 会将应用程序的输出重定向到 ~/.pm2/logs
目录下。我们可以使用以下命令来查看日志文件:
pm2 logs
这个命令将输出所有应用程序的日志。如果想要查看某个应用程序的日志,可以使用以下命令:
pm2 logs my-app
这个命令将输出名为 my-app
的应用程序的日志。如果想要查看某个时间段内的日志,可以使用以下命令:
pm2 logs my-app --since 1d
这个命令将输出 my-app
应用程序从昨天至今天之间的日志。
总结
本文介绍了 PM2 进程管理器的高级用法,包括集群模式、配置文件、环境变量和日志管理。PM2 是一个非常好用的进程管理器,使用它可以轻松地管理 Node.js 应用程序的启动和部署,从而让我们的应用程序运行更加顺畅。希望这篇文章能够对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6e585f6b2d6eab323c80c