为什么使用 PM2?
- 进程管理:PM2可以管理多个Node.js进程,并确保它们始终运行。如果进程崩溃或停止,则PM2可以自动重新启动它们。
- 日志管理:PM2可以记录Node.js应用程序的输出,并将其保存到文件中,可以轻松查看和分析这些日志文件,以便快速诊断和解决问题。
- 负载均衡:PM2可以配置负载均衡,将流量分配到多个Node.js进程中。这可以提高应用程序的可扩展性和可靠性。
- 部署管理:PM2可以帮助您轻松地部署和管理Node.js应用程序。可以使用PM2来部署应用程序,以便它们可以在多个服务器上运行,或者在生产环境中运行。
- 监控:PM2可以监控Node.js应用程序的运行情况,并提供有用的指标和警报。这可以帮助了解应用程序的性能和可靠性,并及时识别潜在的问题。
PM2快速上手
-
安装PM2
npm install pm2 -g
-
进入Node.js项目根目录
// app.js // simple server const express = require('express'); const app = express(); app.get('/hello', (req, res)=>{ res.send('hello') }) app.listen(8888, () =>{ console.log('Server listening on port 8888') })
-
启动项目
pm2 start app.js
-
确认程序状态
pm2 list
-
查看日志
pm2 log
-
停止应用程序
pm2 stop [app-id/app-name]
-
重启应用
pm2 restart [app-id/app-name]
pm2 一些其他的常用命令
-
删除所有应用程序:
pm2 delete all
-
删除指定应用程序:
pm2 delete [app-id/app-name]
-
监控和管理在 PM2 中运行的 Node.js 应用程序:
pm2 monit
。 通过pm2 monit
命令,可以在终端中打开一个仪表盘,显示所有正在运行的应用程序及其资源使用情况,例如 CPU 和内存使用情况、请求次数等等。通过这些监控指标,可以更好地了解应用程序的运行情况,并及时发现潜在的问题,从而做出相应的优化或调整。 -
将 PM2 设置为开机自启动:
pm2 startup
-
存当前运行的应用程序列表,以便下次启动时自动恢复:
pm2 save
-
重新启动(直接将server kill掉然后重新启动一个server)名为 app.js 的应用程序:
pm2 restart app.js
注:重新启动的这一段时间内,server是有一个空窗期的。这个时间内所有的request都会被内核拒绝,因为根本没有它们需要找的server存在。
-
重新加载名为 app.js 的应用程序:
pm2 reload app.js
注:重载是对于cluster模式而言的,通过重新加载,pm2将逐个重新启动所有进程,始终保持至少一个进程运行。reload命令会先创建一个server,然后将原server kill掉,此时原server上的正在执行的request因为进程被关闭而失败。后续的request进来时,因为新server已经启动了。所以不存在空窗期,所以后续的request不会报错。
通过配置文件启动Node.js 项目
-
新建
deploy.json
{ "apps":[ { "name": "app-server", "script": "app.js", "exec_mode": "fork", "watch": false, "ignore_watch" : [ "node_modules", "files" ], "log_date_format": "YYYY-MM-DD HH:mm:ss", "max_memory_restart": "3G", "env": { "COMMON_VARIABLE": "true" }, "env_production": { "NODE_ENV": "production" } } ], "deploy": { "production": { "post-deploy": "pm2 startOrRestart deploy.json --env production", "env": { "NODE_ENV": "production", "PORT": "8888" } } } }
-
启动:
pm2 startOrRestart deploy.json --env production