# 多进程
多进程是除了 守护进程 外,pm2 的另一个核心价值。
# 为什么要用多进程
从内存来说:由于操作系统中同时会有多个进程的存在,而操作系统分配给每个进程的内存是有一定限制的。比如,nodeJS 的进程在 32 位的操作系统中内存只分配了
1.6G
。但是如果此时机器的内存特别大,只能占用1.6G
就是一种赤裸裸的浪费。所以多进程可以实现内存的最大化使用。从CPU来说:4 核 CPU 就是可以同时处理 4 个进程的工作。于是乎,CPU 核数越多,处理事物的速度也就越快。使用多进程就可以最大化使用 CPU 资源
# 有哪些问题
多进程之间的内存是不共享的,比如你存在当前进程中的 session 数据
就是互相之间不同的。于是有了 redis
服务来解决多进程的存储问题。
# 配置文件添加多进程
{
"apps": {
"names": "pm2-test-server",
"script": "app.js",
"instances": 4, // 设置服务进程数
"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"
}
}
启动服务后,可以看到进程数列表如下,有四个进程:
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ app │ default │ 1.0.0 │ cluster │ 31134 │ 0s │ 0 │ online │ 0% │ 31.1mb │ han… │ enabled │
│ 1 │ app │ default │ 1.0.0 │ cluster │ 31135 │ 0s │ 0 │ online │ 0% │ 29.7mb │ han… │ enabled │
│ 2 │ app │ default │ 1.0.0 │ cluster │ 31136 │ 0s │ 0 │ online │ 0% │ 29.7mb │ han… │ enabled │
│ 3 │ app │ default │ 1.0.0 │ cluster │ 31137 │ 0s │ 0 │ online │ 0% │ 20.2mb │ han… │ enabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
开启四个进程,产生的日志目录也会变成多个,多次访问后会发现,每个日志的记录数据可能是不同的。这是因为开启多进程后,pm2
也开启了负载均衡
# 当前目录
.
├── app.js
├── logs
│ ├── err-0.log
│ ├── err-1.log
│ ├── err-2.log
│ ├── err-3.log
│ ├── err.log
│ ├── out-0.log
│ ├── out-1.log
│ ├── out-2.log
│ ├── out-3.log
│ └── out.log
├── package.json
└── pm2.conf.json