pm2 是 node 进程管理工具,能够利用它来简化不少 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,由于在工做中遇到服务器重启后,须要一个个去从新启动每一个服务,这样不只繁琐、效率低,并且容易遗忘开启一些服务,因此特意对 pm2 进行一次比较全面的学习+实践,在解决工做问题的同时,进行一次较完整的学习实践总结,现分享给你们。javascript
博客 github地址为:github.com/fengshi123/… ,汇总了做者的全部博客,也欢迎关注及 star ~html
一、运行如下命令进行全局安装java
$ npm install -g pm2
复制代码
二、安装完以后,会自动建立如下目录:node
$HOME/.pm2/logs // 包括全部应用的日志
$HOME/.pm2/pids // 包括全部应用的 pids
$HOME/.pm2/dump.pm2 // 开机自启动配置
$HOME/.pm2/pm2.log // pm2 日志
$HOME/.pm2/pm2.pid // pm2 pid
复制代码
一、启动命令linux
$ pm2 start app.js
复制代码
启动成功后,咱们对应能够看到启动的服务的一些信息,以下所示:git
二、命令行参数github
咱们能够在最基本的启动命令后面,添加一些参数选项,去知足咱们的需求,经常使用的参数选项以下所示:express
咱们在启动命令后面加入以上的一些参数,完整的启动命令以下所示:npm
$ pm2 start app.js --watch -i max -n first_app
复制代码
启动成功后的截图以下,咱们经过截图能够看到启动的应用名称变为 first_app,而后启动四个进程,说明咱们在启动命令后面添加的参数已经起做用。json
三、重启命令
$ pm2 restart app.js
复制代码
四、中止命令
中止特定的应用,能够经过 pm2 list 先获取应用的名字或者进程的 id,而后再调用如下命令中止相应的应用;
$ pm2 stop app_name | app_id
复制代码
若是须要中止所有的应用,则使用如下命令:
$ pm2 stop all
复制代码
五、删除命令
删除特定的应用,能够经过 pm2 list 先获取应用的名字或者进程的 id,而后再调用如下命令删除相应的应用;
$ pm2 delete app_name | app_id
复制代码
若是须要删除所有的应用,则使用如下命令:
$ pm2 delete all
复制代码
六、查看有哪些进程
$ pm2 list
复制代码
七、查看某个进程的信息
$ pm2 descripe app_name | app_id
复制代码
相应的进程信息输出以下所示:
若是咱们使用命令行参数定义一些选项,那么每次启动进程时,都须要敲上一大堆的命令,很是繁琐;因此咱们可使用配置文件来将命令行参数进行配置,配置文件里的配置项跟命令行参数是基本一致的;以下所示,咱们在 express_project 项目 中添加 pm2 的配置文件 pm2.json ,而后在 package.json 文件中配置启动命令 "pm2": "pm2 start pm2.json" ,这样咱们只须要运行 npm run pm2 就可使用 pm2 启动咱们的 express 项目,而且相关运行参数直接在 pm2.json 中配置好了。相关配置项表示的意义在下面文件中都已经注释说明,就不在一一解释了。
{
"apps": {
"name": "express_project", // 项目名
"script": "app.js", // 执行文件
"cwd": "./", // 根目录
"args": "", // 传递给脚本的参数
"interpreter": "", // 指定的脚本解释器
"interpreter_args": "", // 传递给解释器的参数
"watch": true, // 是否监听文件变更而后重启
"ignore_watch": [ // 不用监听的文件
"node_modules",
"public"
],
"exec_mode": "cluster_mode", // 应用启动模式,支持 fork 和 cluster 模式
"instances": "max", // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log", // 正常日志文件
"merge_logs": true, // 设置追加日志而不是新建日志
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
"min_uptime": "60s", // 应用运行少于时间被认为是异常启动
"max_restarts": 30, // 最大异常重启次数
"autorestart": true, // 默认为 true, 发生异常的状况下自动重启
"restart_delay": "60" // 异常重启状况下,延时重启时间
"env": {
"NODE_ENV": "production", // 环境参数,当前指定为生产环境
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development", // 环境参数,当前指定为开发环境
"REMOTE_ADDR": ""
},
"env_test": { // 环境参数,当前指定为测试环境
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}
}
复制代码
可使用 -i 参数配置集群数,实现负载均衡,相关命令以下,能够查看 官网章节;
$ pm2 start app.js -i 3 // 开启三个进程
$ pm2 start app.js -i max // 根据机器CPU核数,开启对应数目的进程
复制代码
咱们能够经过打开日志文件查看日志外,还能够经过 pm2 logs 来查看实时日志,这点有对于线上问题排查;日志查看命令以下:
$ pm2 logs
复制代码
则咱们能够在命令窗口实时看到日志输出:
咱们可使用如下命令,查看当前经过 pm2 运行的进程的状态;
$ pm2 monit
复制代码
动态监控界面以下所示:
咱们可使用 --max-memory-restart 参数来限制内存使用上限,当超过使用内存上限后自动重启;
$ pm2 start app.js --max-memory-restart 100M
复制代码
在 linux 中,设置开机自启动,只须要执行如下两个步骤:
pm2 startup
,即在/etc/init.d/ 目录下生成 pm2-root 的启动脚本,且自动将 pm2-root 设为服务;pm2 save
,会将当前 pm2 所运行的应用保存在 /root/.pm2/dump.pm2 下,当开机重启时,运行pm2-root 服务脚本,而且到 /root/.pm2/dump.pm2 下读取应用并启动;但在 windows 中运行 pm2 startup 时,会报如下错误,由于其不适合 windows 系统;
咱们须要额外安装其它库,以下所示:
$ npm install pm2-windows-startup -g
$ pm2-startup install
复制代码
而后咱们只须要运行如下保存命令,就能够将如今正在运行的服务添加到开机自启动命令中;后面即便服务器开机重启,也会将咱们保存的服务自动重启;
$ pm2 save
复制代码
本文讲述了 pm2 安装、pm2 基本经常使用命令、pm2 配置文件、以及 pm2 的高阶应用,经过本文的阅读,基本可以使用 pm2 来管理你的 node 应用,至于一些不经常使用的特性,能够访问 pm2 官网; 而且经过本文的实践,做者还优化了以前开源的 express 项目的 pm2 管理,对应的博客文章《一个开箱即用,功能完善的 Express 项目》,但愿对你有帮助。
博客 github地址为:github.com/fengshi123/… ,汇总了做者的全部博客,也欢迎关注及 star ~
参考文献: