PM2 常用命令与监控

对于后台进程的管理,常用的工具是crontab,可用于两种场景:定时任务和常驻脚本。关于常驻脚本,今天介绍一款更好用的工具:pm2,基于nodejs开发的进程管理器,适用于后台常驻脚本管理,同时对node网络应用有自建负载均衡功能。官方的说法,pm2 是一个带有负载均衡功能的Node应用的进程管理器,个人认为,并不准确,因为pm2支持多种语言,只是对于除node之外的其他进程无负载均衡的能力。

一 pm2特点:

首先来说一说pm2的优点有哪些,如下:

  • 支持进程行为配置 ,即可以通过配置,实现对pm2管理应用的一些基础属性更新修改,如应用名称,启动模式等;
  • 支持集群模式,支持负载均衡,但因采用nodejs的cluster模块实现,仅适用于nodejs进程;
  • 支持source map,此项针对js, source map文件是js源文件的信息文件,里面存储着源文件的位置信息;
  • 支持热重启;
  • 支持部署工作流,pm2可依据测试环境和线上环境自动部署到不同的服务器,同时运行在不同配置下;
  • 支持监听重启,在文件更新等情况下可实现进程自动重启;
  • 支持linux的startup进程启动,startup是指系统boot, 进程自启动,如centos的chkconfig;
  • 日志管理,两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
  • 命令自动补全功能,个人感觉这个功能意义不大,而且尝试了一下,没有原生的linux命令自动补全反应敏捷;
  • 监控功能,pm2 monit监控cpu和memory使用情况,keymetrics监控更为详细;
  • 支持开发调试模式,非后台运行,pm2-dev start ;
  • 支持pm2模块开发,实现pm2的功能扩展;
  • keymetrics监控,比pm2 monit监控更为详细友好,通过web页面展示;
  • 最大内存重启,设置最大内存限制,超过限制自动重启;
  • 编程API,提供API供开发者通过编程方式灵活管理进程;

以上简要概述了pm2进程管理工具的特点。

二 pm2常用命令

启动
 
$ pm2 start app.js # 启动app.js应用程序
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
$ pm2 start app.js --watch # 实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload
$ pm2 start script.sh # 启动 bash 脚本
$pm2 start sys.config.js  #启动nodejs框架Express或Koa
 
package.json片段:
"scripts": {
"start": "cross-env NODE_ENV=production node bin/www",
"prd": "pm2 start sys.config.js --only prod",
},

sys.config.js:
module.exports = {
apps: [{
// 生产环境
name: "prod",
// 项目启动入口文件
script: "bin/www",
// 项目环境变量
env: {
"NODE_ENV": "production"
}
}]
}

注意:

-i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。

查看cpu核数参考:Linux查看物理CPU个数、核数、逻辑CPU个数

 
cat /proc/cpuinfo| grep "cpu cores"| uniq
重启
 
$ pm2 restart all # 重启所有应用
重载
 
$ pm2 reload all # 重启 cluster mode下的所有应用
停止
 
$ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 停止 id为 0的指定应用程序
查看进程
 
$ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 show [app-name或 id] # 显示应用程序的所有信息
$ pm2 info [app-name或 id] # 显示应用程序的所有信息
实时监控
 
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
$ pm2 monit 0 # 监控批评行编号为0的进程
$ pm2 monit server.js # 监控名称为server.js的进程
日志
 
$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name或 id] # 显示指定应用程序的日志
$ pm2 flush #Empty all log file
$ pm2 reloadLogs #Reload all logs
删除
 
$ pm2 delete all # 关闭并删除所有应用
$ pm2 delete 0 # 删除指定应用 id 0
升级PM2
 
$ npm install pm2@lastest -g #安装最新的PM2版本
$ pm2 update #升级pm2
其他
 
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode(优雅地重新加载集群模式中的所有应用程序)
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量
$ pm2 startup # 创建开机自启动命令
$ pm2 save # 保存当前应用列表
$ pm2 resurrect # 重新加载保存的应用列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file
开机自动启动

可以通过pm2 startup来实现开机自启动。细节可参考。大致流程如下

  1. 通过pm2 save保存当前进程状态。

  2. 通过pm2 startup [platform]生成开机自启动的命令。(记得查看控制台输出)

  3. 将步骤2生成的命令,粘贴到控制台进行,搞定。

原文地址:https://www.cnblogs.com/cx850116/p/15094240.html