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 | pm2 start app.js |
2.查看启动的进程
pm2 list
3.重新启动
pm2 restart appName|id
4.停止 (停止还可以在启动起来)
pm2 stop appName|idpm2 stop all // 关闭全部
5.删除(删除就没法再启动起来了)
pm2 delete appName|idpm2 delete all // 删除全部
6.查看日志
pm2 log appName|id
7.查看监控器分析问题cpu 内存的一些信息
pm2 monit appName|id
8.查看基本信息
pm2 info appName|id
配置项:(进程数量/ 日志文件目录等)
pm2 start pm2.json // 通过配置文件启动pm21
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来共享