在 Web 开发的过程中,我们经常会遇到需要管理多个进程的情况,如 Node.js 服务、后台任务等。这时候,PM2 可以成为非常有用的工具,它可以帮助我们进行进程守护和恢复,从而提高应用的稳定性和可用性。
什么是 PM2
PM2 是一个 Node.js 应用程序的生产流程管理工具,它可以管理你的应用程序,保证它们始终保持启动状态,即使存在异常退出也可以相应地重启,同时还能监视你的应用程序,当内存占用过高时进行告警。
PM2 是一个基于 Node.js 的开源项目,完全免费,并且支持跨平台使用,支持 Windows、Linux、MacOS 和公有云运行环境等。
安装和使用 PM2
首先我们需要全局安装 PM2,在命令行中输入以下命令即可:
npm install -g pm2
安装完成后,我们可以通过以下命令启动一个应用进程:
pm2 start app.js
这将在后台启动一个 Node.js 进程,并保证它始终处于运行状态。如果我们不希望 PM2 管理某一个进程,也可以在启动时指定 --no-daemon
参数,即:
pm2 start app.js --no-daemon
这样启动的进程会在前台运行,这在调试代码时可能会更加方便。
如果我们需要查看已经启动的进程,可以使用以下命令:
pm2 list
这将列出所有已经启动的进程,包括进程 ID、名称、状态、版本号等信息。
如果我们需要重启某一个进程,可以使用以下命令:
pm2 restart app
这将重启名称为 app
的进程。
除了以上的命令之外,PM2 还支持很多其他的命令,如停止进程、查看日志、设置环境变量等。
进程守护和恢复
PM2 最大的特点之一就是可以进行进程守护和恢复。一旦应用程序出现了异常,PM2 会自动重启应用程序,从而保证应用程序始终处于运行状态。
PM2 的进程守护和恢复依赖于 PM2 自身的监控机制。当 PM2 发现一个进程异常退出时,会根据配置文件中的设置自动重启进程。下面我们来具体了解一下:
配置文件
在使用 PM2 进行进程管理时,我们需要准备一个配置文件(pm2.config.js
),并在启动时指定该配置文件。该配置文件是一个 JavaScript 文件,包括一个名为 module.exports
的对象,对象中可以设置一些 PM2 启动时需要的参数,如应用程序的入口文件、应用程序需要使用的环境变量等。例如:
-- -------------------- ---- ------- -------------- - - ----- -- ----- -------- ------- --------- -- ------- ---------- ------------------------------------------------------------- ----- ---- ----- ---------- -- ------------ ----- ------ ------ ------------------- ----- ---- - --------- ------------ -- --------------- - --------- ------------ - -- --展开代码
上面的配置文件中,apps
数组中包含一个应用程序对象,该对象包括了以下属性:
name
:应用程序名称script
:应用程序入口文件instances
:应用程序启动的实例个数,可以设置为0
,表示根据 CPU 核数来启动实例autorestart
:当应用程序异常退出时,是否自动重启,默认为true
watch
:当文件变化时,是否自动重启,默认为false
max_memory_restart
:应用程序占用内存的阈值,超过该阈值时自动重启应用程序env
:应用程序所需要的环境变量env_production
:生产环境所需要的环境变量
除了以上的属性之外,我们还可以通过 args
参数来为应用程序传递参数,如上面的配置中通过 args: 'one two'
传递了两个参数给应用程序。
进程重启
当应用程序异常退出时,PM2 会根据配置文件中的设置自动重启应用程序。此时,我们可以在 PM2 的日志中查看详细的错误日志,进而进行问题排错。
如果需要手动重启某一个进程,可以使用以下命令:
pm2 restart app
这将重启名称为 app
的进程。
进程监控
PM2 还可以在运行期间监控进程的使用情况,如 CPU 占用率、内存占用率等。如果进程内存占用过高,PM2 可以根据配置文件中的设置来自动进行重启。
我们可以使用以下命令来监控进程:
pm2 monit
这将打开一个 Web 界面,显示当前所有进程的状态信息,包括 CPU 占用率、内存占用率、事件循环延迟等。
总结
本文介绍了如何使用 PM2 进行进程守护和恢复,包括了 PM2 的安装、使用方法、进程守护和恢复的原理等。希望本文能够对大家有所帮助,在日常的开发中能够更加轻松地管理多个进程。
附:示例代码
以下是一个简单的 Node.js 应用程序代码(app.js
):
const http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!'); }).listen(3000);
使用 PM2 启动该应用程序,可以使用以下命令:
pm2 start app.js --name myapp --watch --node-args="--inspect-brk=0.0.0.0:9229"
该命令中有几个参数需要注意:
--name
:指定应用程序名称为myapp
--watch
:当文件变化时,自动重启应用程序--node-args="--inspect-brk=0.0.0.0:9229"
:开启 Node.js 的调试模式,并监听9229
端口,这样可以通过 VS Code 进行远程调试
以上命令执行成功后,可以通过以下命令查看进程状态:
pm2 list
同时也可以通过浏览器访问 http://localhost:3000 查看应用程序是否正常运行。
如果需要重启应用程序,可以使用以下命令:
pm2 restart myapp
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f70dd3f6b2d6eab3f9ca2c