• 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生成的命令,粘贴到控制台进行,搞定。

  • 相关阅读:
    Android推送通知指南
    proteus ISIS学习笔记
    总结ACM 中的基本输入输出
    WINDOWS远程默认端口3389的正确修改方式
    SQL还原数据库后孤立用户问题处理(SQL 数据库 拥有对象 无法删除)
    利用计划任务定时备份Express2005数据库
    使用 bcompiler 给PHP代码加密编译
    Discuz X2.5 编辑DIY数据出现:Unknown column 'pid' in 'where clause' 的解决办法
    批处理解决SqlServer自动备份与自动清理7天以前的备份
    PHP去除全角空格与空白字符
  • 原文地址:https://www.cnblogs.com/cx850116/p/15094240.html
Copyright © 2020-2023  润新知