首页 > 编程语言 >nodejs pm2 详解

nodejs pm2 详解

时间:2022-11-09 16:44:45浏览次数:79  
标签:pm2 nodejs app js start 详解 应用 进程

一、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

标签:pm2,nodejs,app,js,start,详解,应用,进程
From: https://www.cnblogs.com/bisiyuan/p/16874295.html

相关文章

  • K8S中使用EFK的filebeat配置详解
    前言近期公司不少项目都上了K8S,随着项目越来越多,有时候会出现“服务异常”等情况,需要上到服务器敲一大堆的命令,才有可能找到疑似的异常原因。如果我们将这些数据全部记录到......
  • Nginx配置文件详解
    Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server......
  • 目标检测中的平均精度(mAP)详解--建议收藏+掌握
    导读本文将详细介绍目标检测中的平均精度(mAP),建议收藏并掌握。(公众号:OpenCV与AI深度学习)背景介绍   平均精度(mAP)是用于评估机器学习模型的性能指标。它被PASCALV......
  • 阿里云ecs使用详解
     https://help.aliyun.com/document_detail/151694.html?spm=a2c4g.11186623.0.0.3ac1a6659YY9zX准备工作创建账号,以及完善账号信息。注册阿里云账号,并完成实......
  • Redis的安装和Redis的基本数据库操作实操详解
    一.什么是Redis?Redis是远程字典服务器,Remotedictionaryserver一个开源的基于内存的数据库,常用作键值存储、缓存和消息队列等。Redis通常被称为数据结构服务器......
  • UML应用开发详解--视频
    ​​UML应用开发详解​​地址:​​http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240574​​通过本教程,可以使学员掌握UML建模中的结构建模,包括类......
  • 7.1.3 TimePicker结合案例详解
    TimePicker是Android的时间设置控件。TimePicker类的继承图如下:java.lang.Object↳android.view.View↳android.view.ViewGroup↳andro......
  • 凯撒密码详解
    凯撒密码最佳的解法就是用指针位移进行求解这是后面在路上想到的解法:就是生成一个a到z的最初的做法:就是也是生成一个a到z序列,然后进行向后移动,生成解密序列,然后通过a[......
  • Kubernetes K8S之Service服务详解与示例
    主机配置规划Service概述KubernetesService定义了这样一种抽象:逻辑上的一组Pod,一种可以访问它们的策略——通常被称为微服务。这一组Pod能够被Service访问到,通常是......
  • Nodejs中的this
    以下内容都是关于在nodejs中的this而非JavaScript中的this,nodejs中的this和在浏览器中JavaScript中的this是不一样的。在全局中的thisconsole.log(this);{}this.num=10;c......