NodeJs - PM2
前言
刚刚说ubuntu启动node服务遇到问题时,提到了pm2,那就顺便记录一下pm2的介绍及他的用法吧。
简介
PM2
pm2
是一个内置负载均衡的node.js
应用进程管理器(也支持Windows
),其它的类似功能也有不少,但是感觉pm2
功能更强,更值的推荐
GitHub地址:https://github.com/Unitech/pm2
API Docs:http://pm2.keymetrics.io/docs/usage/cluster-mode/
NPM地址:https://www.npmjs.com/package/pm2
使用体会:
- 简单易用、后台运行、快速部署,常用到的命令就几个
- 可轻松集群模式启动
- 可以无宕机重暂应用程序,保持不断连接的情况下轻松重载代码
- 完善的日志
- 自动停止不稳定的进程
- 保活应用程序
pm2安装
官方安装说明: http://pm2.keymetrics.io/docs/usage/quick-start/
安装指令:npm install pm2 -g
安装成功如下:
root@VM-16-5-ubuntu:/home/ubuntu# npm install pm2 -g
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
added 184 packages, and audited 185 packages in 16s
12 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
root@VM-16-5-ubuntu:/home/ubuntu#
root@VM-16-5-ubuntu:/home/ubuntu# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@VM-16-5-ubuntu:/home/ubuntu# ln -s /usr/sbin/nodejs/bin/pm2 /usr/local/bin/
root@VM-16-5-ubuntu:/home/ubuntu# pm2 list
-------------
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
_\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
_\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
_\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
_\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
_\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
_\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
_\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
_\///______________\///______________\///__\///////////////__
Runtime Edition
PM2 is a Production Process Manager for Node.js applications
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
http://pm2.io/
-------------
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
查看版本:pm2 -v
各平台安装方法一致
操作
我这里有个express的web项目:NeteaseCloudMusicApi,端口是5188
启动
pm2 start app.js
关闭
pm2 stop 0
为什么stop后是0? 从上图可以看出进程ID为0,所以通过进程ID可以关闭,然后这种方式不易记,下面我看看其它方式启动和关闭
其它方式启动/关闭
启动项目,并命名一个应用程序名
pm2 start app.js --name="NeteaseCloudMusic"
启动后结果如下图,你可以看到App name
根据App name关闭项目
pm2 stop NeteaseCloudMusic
可以自行试一下效果,关闭成功!
从PM2中删除
pm2 delete NeteaseCloudMusic
当然也可以 pm2 delete 进程ID
重载和重启
当应用程序代码有更新,可以用重载来加载新代码,也可以用重启来完成pm2 reload NeteaseCloudMusic
reload可以做到0秒宕机加载新的代码
pm2 restart NeteaseCloudMusic
restart则是重新启动,生产环境中多用reload来完成代码更新!
查看详情
pm2 show NeteaseCloudMusic
输出如下图:
通过查看详情就可以看到很多有用信息,包含日志和错误输出的文件路径(感觉日志是用的比较多的)
多项目操作
上面是单项目操作,多项目操作是如何呢?
启动其它项目也如上面命令,我新启一个项目:pm2sample2(端口为5199)
cd 项目目录
pm2 start app.js --name test2
批量操作
批量操作(多个也一样),如下(重加载全部/停止全部/重启全部/删除全部)pm2 reload all
pm2 stop all
pm2 restart all
pm2 delete all
集群
从前面的图中可以看出mode是“fork”
开发环境中多以fork的方式启动,生产环境中多用cluster方式启动
启动方式
pm2 start app.js -i 2 --name test
这表示启动2个并命名为test,在后台以cluster方式运行
操作完成后可以看出mode为“cluster
”方式,其它操作就可以通过上面用过的方式去启动、关闭、重载、重启、删除
其它操作
watching
从前面的图中可以看一“watching
”一项,这个项默认是disabled
,可以通过如下命令开启pm2 start app.js --name test --watch
上面的命令中启去吧了test项目并开启了watching
,这个用处主要更新代码后,不用重载或重启项目即可以立即让更新的代码起作用
建议:这个适合在开发时用,可以省不少时间,生产环境下最好不要用
list
pm2 list
可以列出pm2中所有项目
monit
pm2 monit
用monit可以打开实时监视器去查看资源占用情况
logs
pm2 logs
通过上面命令可以实时查看日志输出情况
写在之后…
本篇主要对PM2常用命令进行说明
PM2还有其它很多其它功能,可以通过上面提供的api链接去查看
但是基本用上面这些命令就够了,现在项目中就用的PM2,感觉还是不错,用于生产环境完全没问题!