线上环境进程守护/负载均衡/日志管理的Node应用的进程管理 - pm2

1)一般方式启动一个node服务

node app.js 遇到进程奔溃,手动启动

2)本地开发环境使用node monitor - nodemon启动一个node服务

nodemon app.js 遇到进程奔溃,自动监听自动启动

3)线上环境使用pm2启动一个node服务

pm2 遇到进程奔溃,会自动重启

pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能…下面来安装配置一下pm2在部署在线上服务器做nodejs服务的进程守护…总的来说特点有:

1>内建负载均衡(使用Node cluster 集群模块)- 自动检测空闲的进程
2>可以在后台运行 - 后台启动后命令行就不在占用了
3>可以0秒停机重载,(可以理解为不需要停机重启,在用户愉快的浏览页面时我们已经程序更新了)
4>控制台检测
5>日志管理
6>热重载

0.安装

npm i pm2 -g

1.启动

1
2
3
pm2 start app.js
pm2 start bin/www
pm2 start pm2.conf.json // 从配置文件启动

2.查看启动的进程

pm2 list

3.重新启动

pm2 restart appName|id

4.停止 (停止还可以在启动起来)

pm2 stop appName|id
pm2 stop all // 关闭全部

5.删除(删除就没法再启动起来了)

pm2 delete appName|id
pm2 delete all // 删除全部

6.查看日志

pm2 log appName|id

7.查看监控器分析问题cpu 内存的一些信息

pm2 monit appName|id

8.查看基本信息

pm2 info appName|id

配置项:(进程数量/ 日志文件目录等)

pm2 start pm2.json // 通过配置文件启动pm2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// pm2.json的配置文件
{
"apps": {
"name": "pm2-test-server", // 进程名称
"script": "app.js", // server文件
"watch": false, // 检测更新
"ignore_watch": [ // 忽略文件变化
"node_modules",
"log"
],
"instance": 4, // 进程数
"error_file": "log/err.log", // 错误日志
"out_file": "log/out.log", // 日志输出路径
"log_date_format": "YYYY-MM-DD HH:MM:SS" // 日志时间戳
}
}

PM2的多进程

  • 1.为何使用多进程

1)内存是受限的
例如nodejs一个单线程在32为操作系统下最大使用1.6G内存

2)内存:无法重复分利用机器全部内存

3)cpu:无法充分利用多核cpu的优势

  • 2.多进程和redis:多进程之间,内存无法共享(多进程访问一个redis,实现数据共享)

遇到的问题就是多进程无法共享数据,所以需要通过redis来共享

demo

pm2 demo

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场