pm2和forever是启动Nodejs服务经常使用到的两个工具。使用这两个指令可使node服务在后台运行(相似于linux的nohup),另外它们能够在服务因异常或其余缘由被杀掉后进行自动重启。 因为Node的单线程特征,自动重启能很大程度上的提升它的健壮性。 本文不对比二者工具优劣,只是结合本身的使用,简要介绍如何在工程部署时更好的使用pm2。node
基本指令 npm install pm2 -g : 全局安装。 pm2 start app.js : 启动服务,入口文件是app.js。 pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。 npm restart [name or id] : 重启服务。 npm reload [name or id] : 和rastart功能相同,可是能够实现0s的无缝衔接;若是有nginx的使用经验,能够对比nginx reload指令。 pm2 start app.js --max_memory_restart 1024M : 当内存超过1024M时自动重启。 若是工程中有比较棘手的内存泄露问题,这个算是一个折中方案。 pm2 monit : 对服务进行监控。linux
更多的指令能够参考 PM2 介绍nginx
高级用法 pm2支持配置文件启动: pm2 ecosystem: 生成配置文件ecosystem.json pm2 startOrRestart /file/path/ecosystem.json : 经过配置文件启动服务shell
以下是我开发时ecosystem.json的内容:npm
{ /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ * 多个服务,依次放到apps对应的数组里 */ apps : [ // First application { name : "nova", max_memory_restart: "300M", script : "/root/nova/app.js", out_file : "/logs/nova_out.log", error_file : "/logs/nova_error.log", instances : 4, exec_mode : "cluster", env: { NODE_ENV: "production" } } ] }
上述采用cluster模式启动了4个服务进程;若是服务占用的内存超过300M,会自动进行重启。json
监控工具 pm2的监控功能是其一大特点,它提供的监控服务Keymetrics monitoring 很酷炫,感兴趣的能够配置玩一下。后端
一些思考数组
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l缓存
cat /proc/cpuinfo| grep "cpu cores"| uniq服务器
cat /proc/cpuinfo| grep "processor"| wc -l 固然能够启动多个端口,一个端口号对应一个服务,这样的话就须要nignx来作负载均衡了。
反向代理,实现简单的负载均衡: 若是有多台服务器或者一台服务器多个端口,能够考虑用nginx。 静态资源缓存:把一些静态资源(如静态页面,js等资源文件)放到nginx里,能够极大的提升服务的性能。 3. 自动化部署 经过shell脚本实现资源拉取、服务重启、nginx缓存更新等操做,再配合pm2的监控功能,就初步达到了一个后端工程部署的标配了