PM2是一个带有负载均衡功能的Node应用的进程管理器。PM2可以充分利用服务器上的所有CPU,并保证进程永远都活着,0秒的重载,部署管理多个Node项目。PM2是Node线上部署完美的管理工具。
- 基础使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
npm install pm2 -g : 全局安装。
pm2 start app.js : 启动服务,入口文件是app.js。
pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。
pm2 restart [name or id] : 重启服务。
pm2 reload [name or id] : 和rastart功能相同,但是可以实现0s的无缝衔接;如果有nginx的使用经验,可以
对比nginx reload指令。
pm2 start app.js --max_memory_restart 1024M : 当内存超过1024M时自动重启。 如果工程中有比较棘手的内
存泄露问题,这个算是一个折中方案。
pm2 monit : 对服务进行监控。
|
- 查看服务进程数
1
2
3
4
5
6
7
8
9
10
11
12
|
至于要启动几个进程,可以通过服务器的内核数进行确定,几个内核就启动几个服务。指令如下:
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
当然可以启动多个端口,一个端口号对应一个服务,这样的话就需要nignx来做负载均衡了。
|
- 是否需要nginx
nginx可以做的事情主要有两个:
反向代理,实现简单的负载均衡: 如果有多台服务器或者一台服务器多个端口,可以考虑用nginx。
静态资源缓存:把一些静态资源(如静态页面,js等资源文件)放到nginx里,可以极大的提高服务的性能。
- fork与cluster启动模式
开发环境中多以fork的方式启动,生产环境中多用cluster方式启动
fork模式可以应用于其他语言,如php,python,perl,ruby,bash,coffee, 而cluster只能应用于node;
fork不支持定时重启,cluster支持定时重启。定时重启也就是配置中的cron_restart配置项。