pm2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控,自动重启,负载均衡等。
安装
npm install -g pm2
常用命令
- 启动
- –watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听,不监听的目录。通过配置文件
- -i --instance:启用多少个实例,可用于负载均衡。如果-i 0 或者 -i max,则根据当前机器核数确定实例数
- –ignor-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则,–ignore-watch=“test node_modules ‘some scripts’”
- -n --name:应用的名称,查看应用信息的时候可以用到。
- -o --output
:标准输出日志文件的路径 - -e --error
:错误输出日志文件的路径 - –interpreter :
pm2 start app.js --watch -i 2;
- 查看进程状态
pm list
- 查看某个进程的状态
pm2 describe id|name
- 重启
pm2 restart app.js
- 停止
停止单个需要通过指定进程的name或者id。所以先通过 pm2 list 获取进程数据。然后执行停止
pm2 stop name|id // 停止单个
pm2 stop all // 停止所有
- 删除
和停止一样,删除单个也需要获取进程name/id
pm2 del name|id // 删除单个
pm2 del all // 删除所有
配置文件
- 配置文件的设置项和命令行的参数基本上是一样的。
- 可以选择yaml|json文件
- json格式的配置文件会被pm2当成普通的js文件来处理,所以可以在里面添加注释或者编写代码,这样有助于动态调整配置
- 如果启动的时候制定了配置文件,那么部分命令行参数会被忽略
{
"name" : "fis-receiver", // 应用名称
"script" : "./bin/www", // 实际启动脚本
"cwd" : "./", // 当前工作路径
"watch": [ // 监控变化的目录,一旦变化,自动重启
"bin",
"routers"
],
"ignore_watch" : [ // 从监控目录中排除
"node_modules",
"logs",
"public"
],
"watch_options": {
"followSymlinks": false
},
"error_file" : "./logs/app-err.log", // 错误日志路径
"out_file" : "./logs/app-out.log", // 普通日志路径
"env": {
"NODE_ENV": "production" // 环境参数,当前指定为生产环境
}
}
多环境切换
在配置文件中通过env_xx来声明不同环境的配置,然后在启动的时候通过–env参数指定运行的环境
- env为默认的环境配置(生产环境),env_dev(开发环境),env_test(测试环境)
- 不同环境下的NODE_ENV,REMOTE_ADDR字段的值是不同的。
- 在应用中,可以通过process.env,REMOTE_ADDR等来读取配置中声明的变量。
"env": {
"NODE_ENV": "production",
"REMOTE_ADDR": "http://www.example.com/"
},
"env_dev": {
"NODE_ENV": "development",
"REMOTE_ADDR": "http://www.example.dev.com/"
},
"env_test": {
"NODE_ENV": "test",
"REMOTE_ADDR": "http://www.example.test.com/"
}
// 启动的时候指定环境启动
pm2 start app.js --env dev
负载均衡
pm2 start app.js -i 0 // 根据机器当前的核数,自动开始尽可能多的进程
pm2 start app.js -i 3 // 开启三个进程
pm2 start app.js -i mmax // 根据机器的cpu核数,开启对应数目的进程
日志查看
pm2 logs
监控
通过数据大盘查看pm2运行进程的状态
pm2 monit
内存超过上限自动重启
设置内存上限,并且内存达到上限之后自动重启
pm2 start big-array.js --max-memory-restart 20M;
pm2 --help功能
- 指令自动补全
pm2 completion install
source ~/.bash_profile
- 开机自动重启
- 首先通过pm save保存当前的状态
- 通过pm2 startup [platform]生成开机自启动的命令
- 将步骤2生成的命令,粘贴到控制台运行
pm2 + nginx反向代理配置
upstream test {
server 127.0.0.1:3001;
}
server {
listen 80;
server_name my_nodejs_server;
root /home/www/project_root;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://test;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
参考地址
pm2远程部署:https://pm2.keymetrics.io/docs/usage/deployment/#getting-started
pm2API:https://pm2.keymetrics.io/docs/usage/pm2-api/
pm2在线监控系统:https://id.keymetrics.io/api/oauth/login