PM2高级Node进程管理器
PM2是nodejs的进程管理器,内置了一个进程负载均衡器,让你的应用一直保持运行,也可以辅助系统管理管理服务器
2 min read
By
myfreax

PM2是nodejs的进程管理器,内置了一个进程负载均衡器,让你的应用一直保持运行,也可以辅助系统管理管理服务器
Behavior configuration行为配置
{
"apps" : [{
// Application #1
"name" : "worker-app",
"script" : "worker.js",
"args" : ["--toto=heya coco", "-d", "1"],
"watch" : true,
"node_args" : "--harmony",
"merge_logs" : true,
"cwd" : "/this/is/a/path/to/start/script",
"env": {
"NODE_ENV": "development",
"AWESOME_SERVICE_API_TOKEN": "xxx"
},
"env_production" : {
"NODE_ENV": "production"
},
"env_staging" : {
"NODE_ENV" : "staging",
"TEST" : true
}
},{
// Application #2
"name" : "api-app",
"script" : "api.js",
"instances" : 4,
"exec_mode" : "cluster_mode",
"error_file" : "./examples/child-err.log",
"out_file" : "./examples/child-out.log",
"pid_file" : "./examples/child.pid"
}]
}
日志管理
实时日志管理
$ pm2 logs
$ pm2 logs big-api
Flush清除日志
$ pm2 flush # Clear all the logs
Reloading-all-Logs 重载全部日志
$ pm2 reloadLogs
Log-Configuration 日志配置
$ pm2 start echo.js --merge-logs --log-date-format="YYYY-MM-DD HH:mm Z"
Options:
--merge-logs do not postfix log file with process id
--log-date-format <format> prefix logs with formated timestamp
-l --log [path] specify entire log file (error and out are both included)
-o --output <path> specify out log file
-e --error <path> specify error log file
JSON方式配置
{
"script" : "echo.js",
"error_file" : "err.log",
"out_file" : "out.log",
"merge_logs" : true,
"log_date_format" : "YYYY-MM-DD HH:mm Z"
}
logrotate 日志回滚
$ pm2 install pm2-logrotate
$ sudo pm2 logrotate -u user
Monitoring 管理
命令行
$pm2 monit
跨服务器管理
你只需要到keymetrics注册个帐号,然后在你的服务器上
$ pm2 link xsdx0lk95zsex7q h7zesfwxsd9xgw3 [machine name]
最大内存自动重启
$ pm2 start big-array.js --max-memory-restart 20M
JSON
{
"name" : "max_mem",
"script" : "big-array.js",
"max_memory_restart" : "20M"
}
多进程自动均衡负载
Node是单进程的,不能充分利用多核CPU的优势,使用PM2即可解决
# Start the maximum processes depending on available CPUs
$ pm2 start app.js -i 0
# Start the maximum processes -1 depending on available CPUs
$ pm2 start app.js -i -1
# Start 3 processes
$ pm2 start app.js -i 3
热重载
省去不用手动杀死node进程和启动
$ pm2 reload api
Deployment workflow 开发工作流
PM2嵌入简单且强大的部署系统,可以实现多主机,本地化,自动部署
非ROOT用户监听80端口
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown %user% /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update