为什么使用 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 serverconst 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