学习Pm2 第一章

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: pm2 是 node 进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,因为在工作中遇到服务器重启后,需要一个个去重新启动每个服务,这样不仅繁琐、效率低,而且容易遗忘开启一些服务。

PM2 Node 应用进程管理器


pm2 是 node 进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,因为在工作中遇到服务器重启后,需要一个个去重新启动每个服务,这样不仅繁琐、效率低,而且容易遗忘开启一些服务。


PM2 的主要特性


  • 内建负载均衡(使用 Node cluster 集群模块)
  • 后台运行
  • 0 秒停机重载
  • 具有 Ubuntu 和 CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )


一、安装 & 目录


1、运行以下命令进行全局安装


npm install -g pm2


二、常用命令


1、启动命令


$ pm2 start app.js


启动成功后,我们对应可以看到启动的服务的一些信息,如下所示:


cf05659be1f742aa9992da18ff4cd1d9.png


2、命令行参数


我们可以在最基本的启动命令后面,添加一些参数选项,去满足我们的需求,常用的参数选项如下所示:


  • --watch:监听应用目录的变化,一旦发生变化,自动重启。
  • -i or --instance:启用多少个实例,可用于负载均衡,如果 -i 0 或者 -i max,则根据当前机器核数确定实例数目。
  • --ignore-watch:排除监听的目录或文件,可以是特定的文件名,也可以是正则。


我们在启动命令后面加入以上的一些参数,完整的启动命令如下所示:


pm2 start app.js --watch -i max -n xiaoman


启动成功后的截图如下,我们通过截图可以看到启动的应用名称变为 xiaoman,然后启动12个进程,说明我们在启动命令后面添加的参数已经起作用。


49724fbacd434f16b710f9c3cd1ff90c.png


3、重启命令


$ pm2 restart app.js


4、停止命令


停止特定的应用,可以通过 pm2 list 先获取应用的名字或者进程的 id,然后再调用以下命令停止相应的应用;


$ pm2 stop app_name | app_id
复制代码


如果需要停止全部的应用,则使用以下命令:


$ pm2 stop all


5、删除命令


删除特定的应用,可以通过 pm2 list 先获取应用的名字或者进程的 id,然后再调用以下命令删除相应的应用;


$ pm2 delete app_name | app_id


如果需要删除全部的应用,则使用以下命令:


$ pm2 delete all


6、查看有哪些进程


$ pm2 list


三、配置文件


如果我们使用命令行参数定义一些选项,那么每次启动进程时,都需要敲上一大堆的命令,非常繁琐;所以我们可以使用配置文件来将命令行参数进行配置,配置文件里的配置项跟命令行参数是基本一致的;如下所示  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": ""
        }
    }
}
复制代码


四、高阶应用


1、负载均衡


可以使用 -i 参数配置集群数,实现负载均衡,相关命令如下,可以查看 官网章节


$ pm2 start app.js -i 3 // 开启三个进程
$ pm2 start app.js -i max // 根据机器CPU核数,开启对应数目的进程 

2、日志查看


我们可以通过打开日志文件查看日志外,还可以通过 pm2 logs 来查看实时日志,这点有对于线上问题排查;日志查看命令如下:


$ pm2 logs


则我们可以在命令窗口实时看到日志输出:


bdb22c9674d14b4381dc831b6ce9b535.png


3、监控


我们可以使用以下命令,查看当前通过 pm2 运行的进程的状态;


$ pm2 monit


动态监控界面如下所示:


833a95998f274ece8dc679ad4a367e74.png

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
资源调度 监控 负载均衡
浅析PM2实用入门指南
PM2 是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单
1515 0
|
8月前
|
开发框架 Java 关系型数据库
Java毕业论文参考文献参考例子整理
Java毕业论文参考文献参考例子整理
415 0
|
负载均衡 监控
如何使用pm2 管理应用,进来一看便知
如何使用pm2 管理应用,进来一看便知
186 0
如何使用pm2 管理应用,进来一看便知
VB中随机数案例复习加练【VB学习笔记2020课堂版08】
VB中随机数案例复习加练【VB学习笔记2020课堂版08】
VB中随机数案例复习加练【VB学习笔记2020课堂版08】
PM - 产品思想篇
PM - 产品思想篇
101 0
PM - 产品思想篇
|
IDE Ubuntu 开发工具
第一章--第一节:环境搭建
第一章--第一节:环境搭建
115 0
第一章--第一节:环境搭建
|
IDE Ubuntu 开发工具
Python入门系列第一章--第一节:环境搭建
Python入门系列第一章--第一节:环境搭建
131 0
Python入门系列第一章--第一节:环境搭建
|
Web App开发 测试技术 数据库
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
作者:依乐祝原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员的自白 这篇文章会这么火,更没想到的是张善友队长的公众号居然也转载了这篇文章,这就导致两天的时间就有两百多位读者朋友加入了.
1920 0