一、PM2是什么

  • pm2是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。
  • 嗯嗯,最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态。
  • pm2官方文档

二、为什么要使用pm2

  • 原始社会的我们开发node服务端程序一般过程:

    • 编写好node程序app.js,运行node app.js;或者写入script使用npm运行;打开浏览器访问;
    • 好像需要修改内容,浏览器对修改的内容没有显示出来?->node app.js->再次运行;
    • 浏览器忽然访问不到服务,好像出错啦?重启下->node app.js->再次运行;
    • 哎呀开了好多控制台窗口,一不小心关闭了,服务又访问不到了,继续打开控制台->node app.js->再次运行;
  • 好崩溃!好像有个工具nodemon;安装使用nodemon app.js;哇,可以自动监听文件修改变化自动重启,但是关闭控制台服务还是会被摧毁。
  • 通过这个很常用的场景,我们了解到要避免这些麻烦一个服务器至少需要有:后台运行和自动重启,这两个能力。
  • 再来看看使用pm2可拥有的能力:
    • 日志管理;两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
    • 负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许以零秒停机时间重新启动应用程序。
    • 终端监控:可以在终端中监控应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。
    • SSH部署:自动部署,避免逐个在所有服务器中进行ssh。
    • 静态服务:支持静态服务器功能
    • 支持开发调试模式,非后台运行,pm2-dev start <appName>;
    • 。。。。。太过强大!

三、pm2常用命令

启动服务pm2 start <script_file|config_file> [options]启动指定应用

1. 启动一个node程序

  pm2 start app.js        //启动app.js应用

2. 启动进程并指定应用的程序名

  pm2 start app.js --name 程序名          //启动应用并设置name

3. 添加进程监视

监听模式启动,当文件发生变化,自动重启

  pm2 start app.js --name 程序名 --watch(指定程序名的情况下)

  pm2 start app.js --watch (未指定程序名的情况下)

4. 列出所有进程

  pm2 list

  pm2 ls  // 简写

5. 从进程列表中删除进程

  pm2 delete [appname] | id

  pm2 delete app  // 指定进程名删除

   pm2 delete 0    // 指定进程id删除

如果修改了应用配置行为,需要先删除应用,重新启动后方才会生效,如修改脚本入口文件;

6. 删除进程列表中所有进程

pm2 delete all(关闭并删除应用)

7. 查看某个进程具体情况

   pm2 describe app

8. 查看进程的资源消耗情况

   pm2 monit( 监控各个应用进程cpu和memory使用情况)

9. 重启进程

  pm2 restart app.js    //同时杀死并重启所有进程,短时间内服务不可用,生成环境慎用

  pm2 restart all     // 重启所有进程

  pm2 reload app.js    //重新启动所有进程,0秒重启,始终保持至少一个进程在运行 

  pm2 gracefulReload all  //以群集模式重新加载所有应用程序

10. 查看进程日志

   pm2 logs [Name]  //根据指定应用名查看应用日志

    pm2 logs [ID]   //根据指定应用ID查看应用日志

    pm2 logs all    // 查看所有进程的日志

11. 显示应用程序详细信息pm2 show <appName> [options] 显示指定应用详情

  pm2 show [Name]   //根据name查看

  pm2 show [ID]    //根据id查看

12. 停止指定应用pm2 stop <appName> [options] 停止指定应用

  pm2 stop all        //停止所有应用

  pm2 stop [AppName]    //根据应用名停止指定应用

  pm2 stop [ID]       //根据应用id停止指定应用

13. 杀掉pm2管理的所有进程

    pm2 kill

14. 启动静态服务器,将目录dist作为静态服务器根目录,端口为8080

   pm2 serve ./dist 8080

15. 集群模式启动

-i 表示 number-instances 实例数量

max 表示 PM2将自动检测可用CPU的数量 可以自己指定数量

   pm2 start app.js -i max //启用群集模式(自动负载均衡)

16.开发模式启动,即不启用后台运行

   pm2-dev start ...

17. 设置pm2开机自启

开启启动设置,此处是CentOS系统,其他系统替换最后一个选项(可选项:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)

  pm2 startup centos

然后按照提示需要输入的命令进行输入

最后保存设置

  pm2 save

nodejs pm2 详解的更多相关文章

  1. Nodejs this详解

    [Nodejs this详解] Nodejs中, 文件层this,指向的是module.export. 函数层this,指向的是global对象. 参考:http://www.jb51.net/art ...

  2. Nodejs mongoose 详解

    前言 Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具.本文介绍解(翻)密(译)Mongoose插件. Schema 开始我们就要讲到Schema,一个Schema ...

  3. Window下配置NodeJs环境详解

        今年打算学习Web这块,所以就买了本Node.js+MongoDb+AngularJS这本书,这周天也比较忙,想着录视频(拍小片,不是AV,不要误会,是在线课程)的事情,这周又将Asp.Net ...

  4. nodejs Async详解之三:集合操作

    Async提供了很多针对集合的函数,可以简化我们对集合进行异步操作时的步骤.如下: forEach:对集合中每个元素进行异步操作 map:对集合中的每个元素通过异步操作得到另一个值,得到新的集合 fi ...

  5. nodejs Async详解之二:工具类

    Async中提供了几个工具类,给我们提供一些小便利: memoize unmemoize log dir noConflict 1. memoize(fn, [hasher]) 有一些方法比较耗时,且 ...

  6. nodejs URL 详解

    1 我们可以使用.parse方法来将一个URL字符串转换为URL对象 例如: url.parse('http://user:pass@host.com:8080/p/a/t/h?query=strin ...

  7. 详解nodejs中使用socket的私聊和公聊的办法

    详解nodejs中使用socket的私聊和公聊的办法 nodejs的应用中,关于socket应该是比较出彩的了,socket.io在github上有几万人的star,它的成功应该是不输于express ...

  8. nodejs事件和事件循环详解

    目录 简介 nodejs中的事件循环 phase详解 timers pending callbacks idle, prepare poll轮询 check close callbacks setTi ...

  9. nodejs QueryString模块 详解

    QueryString模块 "QueryString" 模块用于实现URL参数字符串与参数对象的互相转换 此类一共包括4个方法: querystring.stringify(obj ...

  10. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. 【Java SE】Day06 类与对象、封装和构造方法

    一.面向对象思想 1.概述:调用对象的行为实现功能,无需一步一步实现(从执行者变成指挥者) 2.类和对象 类是属性和行为的集合,可以看成描述事物的模板 对象是事物的具体体现,是类的一个实例,具备该类的 ...

  2. 乐观锁思想在JAVA中的实现——CAS

    更多技术干活尽在个人公众号--JAVA旭阳 前言 生活中我们看待一个事物总有不同的态度,比如半瓶水,悲观的人会觉得只有半瓶水了,而乐观的人则会认为还有半瓶水呢.很多技术思想往往源于生活,因此在多个线程 ...

  3. python 实现AES加解密

    AES 只是个基本算法,实现 AES 有几种模式,主要有 ECB.CBC.CFB 和 OFB  CTR,直接上代码,此处为AES加密中的CBC模式,EBC模式与CBC模式相比,不需要iv. impor ...

  4. 一次TiDB GC阻塞引发的性能问题分析

    背景 前不久从项目一线同学得到某集群的告警信息,某个时间段 TiDB duration 突然异常升高,持续时间6小时左右,需要定位到具体原因. 分析过程 第一招,初步判断 由于项目条件苛刻,历经苦难才 ...

  5. vue中mixins(混入)的用法

    vue中mixin的使用详解 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被&quo ...

  6. Redis基础学习笔记

    技术分类: 1.解决功能性的问题:Java.Jsp.RDBMS.Tomcat.HTML.Linux.JDBC.SVN 2.解决扩展性的问题:Struts.Spring.SpringMVC.Hibern ...

  7. Python AI小项目打包通关:Pyinstaller和Wix都用上了

    最近有个Python小项目要打个包,项目结构比较简单 main.py(主文件), 以及model_050.hdf5 (在云端训练好的AI模型) 主函数里引用了一些包,如下 需要解决的问题: 将main ...

  8. 51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列

    小 Y 酷爱的接龙游戏正是这样.玩腻了成语接龙之后,小 Y 决定尝试无平方因子二元合数接龙,规则如下: 现有 \(n\) 个不超过 \(K\) 的合数,每个合数 \(a\) 均可表示为 \(a=pq( ...

  9. Blazor Pdf Reader PDF阅读器 组件 更新

    Blazor Pdf Reader PDF阅读器 组件 https://www.nuget.org/packages/BootstrapBlazor.PdfReader#readme-body-tab ...

  10. 合并JSON文件

    下面是一段简单地代码 用来减少工作量合并代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...