PM2管理node.js
什么是PM2
一句话,概括:Advanced, production process manager for Node.js
说白了,进程管理,高级的,看他怎么高级了:
- 内建负载均衡Clustering
- 后台运行
- 自动重启
- 性能监控
- 当然咯,还有日志!!!!
日志得强调一下,我在程序中用log4js,相信很多人用它记日志,部署在服务器后,666大多情况是没有问题的。记有一次程序内存暴涨挂了,有一次AMQP失去连接挂了,看log,什么鬼,没有错误信息??后经多次测试证明,高并发任务处理中程序出错,可能log4js模块的异步写日志线程还没有执行,主线程已经挂掉了。。what ...?
pm2来了,log4js没有记的pm2帮你记^_^
安装
全局安装最新稳定版:
npm install pm2@latest -g
就是这么简单,更新?pm2 update
项目结构
$HOME/.pm2
will contain all PM2 related files$HOME/.pm2/logs
will contain all applications logs,日志文件夹,你会看到app-error-0.log app-out-0.log
等日志,以你起的应用名称开头,输出和报错$HOME/.pm2/pids
will contain all applications pids$HOME/.pm2/pm2.log
PM2 logs$HOME/.pm2/pm2.pid
PM2 pid$HOME/.pm2/rpc.sock
Socket file for remote commands$HOME/.pm2/pub.sock
Socket file for publishable events$HOME/.pm2/conf.js
PM2 Configuration
常用这些
pm2 start app.js --name app //Fork mode 运行 pm2 start app.js -i 0 //Cluster mode 根据有效CPU数目启动最大进程数目 pm2 start app.js -i 4 //Cluster mode 启动4个实例 pm2 list //显示进程状态 pm2 monit // Monitor所有进程 pm2 logs [--raw] //显示所有的日志 pm2 flush //清空所有日志文件 pm2 stop all //停止所有进程 pm2 stop [name|id] //停止某个进程 pm2 restart all //重启所有进程 pm2 restart [name|id] //重启某个进程 pm2 reload all //0秒停机重载进程(for NETWORKED apps) pm2 delete [name|id] //移除某个进程 pm2 delete all //移除所有进程
还有好用的
如果你想加一些参数,比如NODE_ENV
--max-old-space-size
...
可以这么做 pm2 start app.js --max-old-space-size=2048
每个这么搞?好烦。。
pm2支持 Process File 一个配置文件配置你的所有服务
Generate
pm2 ecosystem //将生成一个简单配置文件 ecosystem.config.js
Config
意思一看就明白
module.exports = { /** * Application configuration section */ apps : [ // First application { name : 'app_1', script : '/root/project_1/app.js', env: { NODE_ENV: 'development' }, env_production : { NODE_ENV: 'production' } }, // Second application { name : 'app_2', script : '/root/project_2/app.js', instances : 4, exec_mode : 'cluster', env: { NODE_ENV: 'production' }, env_production : { NODE_ENV: 'production' } }, // Third application { name : 'app_3', script : '/root/project_3/master.js', env: { NODE_ENV: 'production' }, env_production : { NODE_ENV: 'production' }, node_args: "--nouse-idle-notification --gc_global --max-old-space-size=2048" } ] }; //也可以用JSON
CLI
pm2 start ecosystem.config.js //启动所有的应用 pm2 start ecosystem.config.js --only app_1 //启动app_1 pm2 stop ecosystem.config.js [--only app_1] //停止 pm2 restart ecosystem.config.js [--only app_1] //重启 pm2 reload ecosystem.config.js [--only app_1] //重载 pm2 delete ecosystem.config.js [--only app_1] //移除