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

  1. npm i nodemon cross-env-save-dev

那么如何通过 pm2 来启动呢
在 package.json 中添加
通过 pm2 来启动(线上可能会改为 bin/www)

  1. "prd": "cross-env NODE_ENV=production pm2 start app.js"

image.png
程序起来了,且程序可以用了,现在控制台可以使用,因为 watching 是 disabled

11-2 常用命令

常用命令

  • pm2 start + 要启动的文件名/配置文件
  • pm2 list 看已启动的文件列表
  • pm2 restart+ /

image.png 就是这两个值

  • pm2 stop + /
  • pm2 delete + /
  • pm2 info + /
    • 查看指定 app 的信息
  • pm2 log + /
    • 查看指定 app 的日志信息
  • pm2 monit + /
    • 监控进程的CPU 内存等信息

image.png

总结

  • 下载安装
  • 基本使用和 nodemon 的区别
  • 常用命令: list restart stop delete info log monit

11-3 进程守护

进程守护

  • node app.js 和 nodemon app.js 访问时,进程崩溃则不能访问
  • pm2 遇到进程崩溃,会自动重启

在 app.js 中模拟一个会崩溃的错误

  1. // 模拟一个会崩溃的错误
  2. if (req.url === '/err') {
  3. throw new Error('/err 出错了')
  4. }

当输入 url 为 /err 时,程序崩溃了,并且会报错
image.png
但是当重新访问正确的 url 时,如 http://localhost:8000/ 时,则会重启服务,并且正确访问
通过 观察 list 会发现,原理其实就是遇到报错时自动重启一遍

11-4 常用配置

配置

  • 新建 pm2 配置文件(包括进程数量,日志文件目录等)
  • 修改 pm2 启动命令,重启
  • 访问 server,检查日志文件的内容(日志记录是否生效)

实操

在 pm2-test 文件夹下新建一个 pm2.conf.json 文件 和 logs 文件夹里面有 err.log 和 out.log
image.png
然后在 pm2.conf.json 中修改配置文件

  1. {
  2. "apps": {
  3. "name": "pm2-test-server",
  4. "script": "app.js",
  5. "watch": true,
  6. "ignore_watch": [
  7. "node_modules",
  8. "logs"
  9. ],
  10. "error_file": "logs/err.log",
  11. "out_file": "logs/out.log",
  12. "log_date_format": "YYYY-MM-DD HH:mm:ss"
  13. }
  14. }

然后去到 package.json 中去应用下配置文件
image.png
这样就可以根据配置文件来进行运行
然后 pm2 stop 并且 delete app
再 npm run prd
image.png
这样的话 name 也改变了
image.png
包括 log 地址也按照配置文件变化了

总结

  • 进程守护
  • 配置文件(进程数量(下节),日志文件目录(主要))

11-5 多进程

多进程

  • 为何使用多进程
  • 多进程和 redis
    • 多进程有些问题可以通过 redis 来解决

为何使用多进程

image.png
默认会限制大小,单个进程会受限

  • 回顾之前讲 session 时说过,操作系统限制一个进程的内存
  • 内存:无法充分利用机器全部内存
  • CPU:无法充分利用多核 CPU 的优势

多进程的 redis

多进程之间会有问题,数据无法共享
用 session 解决,共享 redis 的方法

  • 多进程之间,内存无法共享
  • 多进程访问一个 redis,实现数据共享

实操

添加配置文件,instances 设为4
image.png
然后再运行
image.png
出现 4个进程
对应4个日志文件
负载均衡

总结

  • 为何使用多进程
  • 多进程与 redis

11-6 总结

关于运维

  • 服务器运维,一般都由专业的 OP 人员和部门来处理
  • 大公司都有自己的运维团队
  • 中小型工期推荐使用一些云服务,如阿里云 node 平台

总结

  • pm2 核心价值
    • 守护,多进程,日志
  • pm2 的常用命令和配置,日志记录
  • 多进程