# 一、介绍
Nodejs 运行在 Chrome 的 JavaScript 运行时平台,通常称这个平台为 V8 引擎, 不管是 V8 引擎还是 Nodejs 都是单线程的方式运行的。 因此在多核心处理器中并不能发挥最大的性能。
# 二、Nodejs 的 cluster 模块
Nodejs 内置的 Cluster 模块,支持生成多个工作线程来共享同一个 TCP 连接。
# 2.1 cluster 运作流程
- Cluster 创建一个 master 线程
- 根据你的需求,fork 出多个 server app (也称为工作线程)
- 线程之间通过 IPC 进行通讯
- 内置负载均衡来处理线程之间的压力【采用 Round-robin 算法进行负载均衡】
使用 Round-robin 调度策略时, master.accepts() 会传入所有的连接请求,然后将相应的 TCP 请求分配给选中的工作线程。【同样使用 IPC 进行通讯】
// 一个最基本的例子
var cluster = require('cluster')
var http = require('http')
var os = require('os')
var numCPUs = os.cpus().length
if (cluster.isMaster) {
// Master:
// Let's fork as many workers as you have CPU cores
for (var i = 0; i < numCPUs; ++i) {
cluster.fork()
}
} else {
// Worker:
// Let's spawn a HTTP server
// (Workers can share any TCP connection.
// In this case its a HTTP server)
http
.createServer(function(req, res) {
res.writeHead(200)
res.end('hello world')
})
.listen(8080)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 2.2 PM2 功能
pm2 做了一些封装,使得 nodejs 代码不需要变动,然后使用负载均衡部署。
pm2 还增加了很多功能,比如自动重启、后台运行、实时扩展集群、零停机更新、开机自启等等,具体可以看下官网。
# 三、常用命令行
# 安装
npm install -g pm2
# 常用命令
pm2 start ./bin/www --watch # 启动express运用
pm2 start app.js #启动
pm2 start app.js --name ma-app #启动项目并指定项目名字
pm2 list|ls #显示所有pm2进程
pm2 stop app_id|app_name|all #停止指定进程
pm2 restart app_id|app_name|all #重启指定进程
pm2 reload app_id|app_name|all #reload指定进程
pm2 delete app_id|app_name|all #删除进程
# 日志管理
pm2 -h #显示所有的pm2 logs命令
pm2 logs app_id #打印对应id的日志
pm2 logs app_id --err #仅打印错误日志
pm2 logs --line 100 #打印日志的行数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18