一、PM2是什么
pm2是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。
嗯嗯,最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态。
pm2官方文档 : https://pm2.keymetrics.io/docs/usage/quick-start/
二、为什么要使用pm2
- 原始社会的我们开发node服务端程序一般过程:
编写好node程序app.js,运行node app.js;或者写入script使用npm运行;打开浏览器访问;
好像需要修改内容,浏览器对修改的内容没有显示出来?->node app.js->再次运行;
浏览器忽然访问不到服务,好像出错啦?重启下->node app.js->再次运行;
哎呀开了好多控制台窗口,一不小心关闭了,服务又访问不到了,继续打开控制台->node app.js->再次运行;
好崩溃!好像有个工具nodemon;安装使用nodemon app.js;哇,可以自动监听文件修改变化自动重启,但是关闭控制台服务还是会被摧毁。
通过这个很常用的场景,我们了解到要避免这些麻烦一个服务器至少需要有:后台运行和自动重启,这两个能力。
- 再来看看使用pm2可拥有的能力:
日志管理;两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许以零秒停机时间重新启动应用程序。
终端监控:可以在终端中监控应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。
SSH部署:自动部署,避免逐个在所有服务器中进行ssh。
静态服务:支持静态服务器功能
支持开发调试模式,非后台运行,pm2-dev start <appName>
;
三、pm2常用命令
启动服务pm2 start <script_file|config_file> [options]
启动指定应用
- 启动一个node程序
pm2 start app.js //启动app.js应用
- 启动进程并指定应用的程序名
pm2 start app.js --name 程序名 //启动应用并设置name
- 添加进程监视
监听模式启动,当文件发生变化,自动重启
pm2 start app.js --name 程序名 --watch(指定程序名的情况下)
pm2 start app.js --watch (未指定程序名的情况下)
- 列出所有进程
pm2 list
pm2 ls // 简写
- 从进程列表中删除进程
pm2 delete [appname] | id
pm2 delete app // 指定进程名删除
pm2 delete 0 // 指定进程id删除
如果修改了应用配置行为,需要先删除应用,重新启动后方才会生效,如修改脚本入口文件;
扫描二维码关注公众号,回复:
14555331 查看本文章
- 删除进程列表中所有进程
pm2 delete all(关闭并删除应用)
- 查看某个进程具体情况
pm2 describe app
- 查看进程的资源消耗情况
pm2 monit( 监控各个应用进程cpu和memory使用情况)
- 重启进程
pm2 restart app.js //同时杀死并重启所有进程,短时间内服务不可用,生成环境慎用
pm2 restart all // 重启所有进程
pm2 reload app.js //重新启动所有进程,0秒重启,始终保持至少一个进程在运行
pm2 gracefulReload all //以群集模式重新加载所有应用程序
- 查看进程日志
pm2 logs [Name] //根据指定应用名查看应用日志
pm2 logs [ID] //根据指定应用ID查看应用日志
pm2 logs all // 查看所有进程的日志
- 显示应用程序详细信息pm2 show [options] 显示指定应用详情
pm2 show [Name] //根据name查看
pm2 show [ID] //根据id查看
- 停止指定应用pm2 stop [options] 停止指定应用
pm2 stop all //停止所有应用
pm2 stop [AppName] //根据应用名停止指定应用
pm2 stop [ID] //根据应用id停止指定应用
- 杀掉pm2管理的所有进程
pm2 kill
- 启动静态服务器,将目录dist作为静态服务器根目录,端口为8080
pm2 serve ./dist 8080
- 集群模式启动
-i 表示 number-instances 实例数量
max 表示 PM2将自动检测可用CPU的数量 可以自己指定数量
pm2 start app.js -i max //启用群集模式(自动负载均衡)
16.开发模式启动,即不启用后台运行
pm2-dev start ...
- 最后保存设置
pm2 save
process.json
一个项目通常会有开发版本、测试版本、灰度版本和线上版本,每一个版本会对应相同或不一样的数据库、API地址。为了方便管理,咱们一般作成配置文件的形式,根据不一样的环境,加载不一样的文件。我们一般使用process依赖包
实现:
https://yehaocheng520.blog.csdn.net/article/details/118382264
可以将多个环境配置写在一个文件中,如process.json文件
{
"apps": [
{
"name": "",
"script": "./index.js",
//日志时间格式
"log_date_format": "YYYY-MM-DD HH:mm:ss",
// 生产环境
"env": {
"NODE_ENV": "production",
"CONFIG_ENV": "production"
},
// 灰度环境
"env_huidu": {
"NODE_ENV": "huidu",
"CONFIG_ENV": "huidu"
},
// 测试环境
"env_test": {
"NODE_ENV": "test",
"CONFIG_ENV": "test"
},
"disable_logs": false,
// 开启几个实例
"instances": 2,
"instance_var": "INSTANCE_ID",
"exec_mode": "cluster"
}
]
}
就可以使用pm2来运行该文件:pm2 start process.json