Node - 内存管理

PM2是一个带有负载均衡功能的Node应用的进程管理器。PM2可以充分利用服务器上的所有CPU,并保证进程永远都活着,0秒的重载,部署管理多个Node项目。PM2是Node线上部署完美的管理工具。

  1. 基础使用
 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. 查看服务进程数
 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来做负载均衡了。
  1. 是否需要nginx

nginx可以做的事情主要有两个:

反向代理,实现简单的负载均衡: 如果有多台服务器或者一台服务器多个端口,可以考虑用nginx。 静态资源缓存:把一些静态资源(如静态页面,js等资源文件)放到nginx里,可以极大的提高服务的性能。

  1. fork与cluster启动模式

开发环境中多以fork的方式启动,生产环境中多用cluster方式启动

  • cluster是fork的派生,cluster支持所有cluster拥有的特性;

  • fork不支持socket地址端口复用,cluster支持地址端口复用。因为只有node的cluster模块支持socket选项SO_REUSEADDR;

fork模式可以应用于其他语言,如php,python,perl,ruby,bash,coffee, 而cluster只能应用于node; fork不支持定时重启,cluster支持定时重启。定时重启也就是配置中的cron_restart配置项。

Licensed under CC BY-NC-SA 4.0