2021-11-30
11-1 开始和 PM2 介绍
线上环境
- 服务器稳定性
- 充分利用服务器的硬件资源,以便提高性能
- 线上日志记录
- 记录的需要记录的事情,出了错进行排查
- 自定义日志,错误日志
PM2
- 进程守护,系统崩溃自动重启
- 启动多进程,充分利用 CPU 和 内存
- 自带日志记录功能
目录
- PM2 介绍
- PM2 进程守护
- PM2 配置和日志记录
- PM2 多进程
- 关于服务器运维
PM2 介绍
- 下载安装
- 基本使用
- 常用命令
pm2:线上环境下在 nodejs 中用于进程守护的工具(用 pm2 来启动),可以做到服务崩溃自动重启,可以使用多进程来分摊各个服务器间的压力和资源,实现控制台日志写入文件
下载安装
- npm install pm2 -g
- pm2 —version 查看版本
- 5.1.2
实操
新建 pm2-test 文件夹 新建 app.js 和下载 cross-env 和 nodemon
npm i nodemon cross-env-save-dev
那么如何通过 pm2 来启动呢
在 package.json 中添加
通过 pm2 来启动(线上可能会改为 bin/www)
"prd": "cross-env NODE_ENV=production pm2 start app.js"
程序起来了,且程序可以用了,现在控制台可以使用,因为 watching 是 disabled
11-2 常用命令
常用命令
- pm2 start + 要启动的文件名/配置文件
- pm2 list 看已启动的文件列表
- pm2 restart+
/
就是这两个值
- pm2 stop +
/ - pm2 delete +
/ - pm2 info +
/ - 查看指定 app 的信息
- pm2 log +
/ - 查看指定 app 的日志信息
- pm2 monit +
/ - 监控进程的CPU 内存等信息
总结
- 下载安装
- 基本使用和 nodemon 的区别
- 常用命令: list restart stop delete info log monit
11-3 进程守护
进程守护
- node app.js 和 nodemon app.js 访问时,进程崩溃则不能访问
- pm2 遇到进程崩溃,会自动重启
在 app.js 中模拟一个会崩溃的错误
// 模拟一个会崩溃的错误
if (req.url === '/err') {
throw new Error('/err 出错了')
}
当输入 url 为 /err 时,程序崩溃了,并且会报错
但是当重新访问正确的 url 时,如 http://localhost:8000/ 时,则会重启服务,并且正确访问
通过 观察 list 会发现,原理其实就是遇到报错时自动重启一遍
11-4 常用配置
配置
- 新建 pm2 配置文件(包括进程数量,日志文件目录等)
- 修改 pm2 启动命令,重启
- 访问 server,检查日志文件的内容(日志记录是否生效)
实操
在 pm2-test 文件夹下新建一个 pm2.conf.json 文件 和 logs 文件夹里面有 err.log 和 out.log
然后在 pm2.conf.json 中修改配置文件
{
"apps": {
"name": "pm2-test-server",
"script": "app.js",
"watch": true,
"ignore_watch": [
"node_modules",
"logs"
],
"error_file": "logs/err.log",
"out_file": "logs/out.log",
"log_date_format": "YYYY-MM-DD HH:mm:ss"
}
}
然后去到 package.json 中去应用下配置文件
这样就可以根据配置文件来进行运行
然后 pm2 stop 并且 delete app
再 npm run prd
这样的话 name 也改变了
包括 log 地址也按照配置文件变化了
总结
- 进程守护
- 配置文件(进程数量(下节),日志文件目录(主要))
11-5 多进程
多进程
- 为何使用多进程
- 多进程和 redis
- 多进程有些问题可以通过 redis 来解决
为何使用多进程
默认会限制大小,单个进程会受限
- 回顾之前讲 session 时说过,操作系统限制一个进程的内存
- 内存:无法充分利用机器全部内存
- CPU:无法充分利用多核 CPU 的优势
多进程的 redis
多进程之间会有问题,数据无法共享
用 session 解决,共享 redis 的方法
- 多进程之间,内存无法共享
- 多进程访问一个 redis,实现数据共享
实操
添加配置文件,instances 设为4
然后再运行
出现 4个进程
对应4个日志文件
负载均衡
总结
- 为何使用多进程
- 多进程与 redis
11-6 总结
关于运维
- 服务器运维,一般都由专业的 OP 人员和部门来处理
- 大公司都有自己的运维团队
- 中小型工期推荐使用一些云服务,如阿里云 node 平台
总结
- pm2 核心价值
- 守护,多进程,日志
- pm2 的常用命令和配置,日志记录
- 多进程