nodejs pm2 详解
一、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 详解的更多相关文章
- Nodejs this详解
[Nodejs this详解] Nodejs中, 文件层this,指向的是module.export. 函数层this,指向的是global对象. 参考:http://www.jb51.net/art ...
- Nodejs mongoose 详解
前言 Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具.本文介绍解(翻)密(译)Mongoose插件. Schema 开始我们就要讲到Schema,一个Schema ...
- Window下配置NodeJs环境详解
今年打算学习Web这块,所以就买了本Node.js+MongoDb+AngularJS这本书,这周天也比较忙,想着录视频(拍小片,不是AV,不要误会,是在线课程)的事情,这周又将Asp.Net ...
- nodejs Async详解之三:集合操作
Async提供了很多针对集合的函数,可以简化我们对集合进行异步操作时的步骤.如下: forEach:对集合中每个元素进行异步操作 map:对集合中的每个元素通过异步操作得到另一个值,得到新的集合 fi ...
- nodejs Async详解之二:工具类
Async中提供了几个工具类,给我们提供一些小便利: memoize unmemoize log dir noConflict 1. memoize(fn, [hasher]) 有一些方法比较耗时,且 ...
- nodejs URL 详解
1 我们可以使用.parse方法来将一个URL字符串转换为URL对象 例如: url.parse('http://user:pass@host.com:8080/p/a/t/h?query=strin ...
- 详解nodejs中使用socket的私聊和公聊的办法
详解nodejs中使用socket的私聊和公聊的办法 nodejs的应用中,关于socket应该是比较出彩的了,socket.io在github上有几万人的star,它的成功应该是不输于express ...
- nodejs事件和事件循环详解
目录 简介 nodejs中的事件循环 phase详解 timers pending callbacks idle, prepare poll轮询 check close callbacks setTi ...
- nodejs QueryString模块 详解
QueryString模块 "QueryString" 模块用于实现URL参数字符串与参数对象的互相转换 此类一共包括4个方法: querystring.stringify(obj ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- Linux第四章 进程
4.1 前言 本章讨论进程概念.资源.属性. 4.2 内核和进程的关系 当系统启动时,内核代码被加载到内存,初始化之后,启动第一个用户进程,然后内核的代码就等着用户进程来调度了. 4.3 进程是程序的 ...
- APICloud AVM框架列表组件list-view的使用、flex布局教程
avm.js 是APICloud 推出的多端开发框架.使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App.小程序和 iOS 轻 App,且多端渲染效果统一:全新 ...
- [编程基础] C++多线程入门2-连接和分离线程
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 2 连接和 ...
- JUC并发编程详解(通俗易懂)
一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.conc ...
- Python网络爬虫get方法出现乱码的解决的三种方案
给大家祭出网络爬虫过程中三种中文乱码的处理方案,希望对大家的学习有所帮助. 方案一 将requests.get().text改为requests.get().content 我们可以看到通过text( ...
- 关于Token和Cookie做权限校验的区别及Token自动续期方案
title: 关于Token和Cookie做权限校验的区别及Token自动续期方案 categories: 后端 tags: - .NET Token和Cookie的区别 首先,要知道一些基本概念:h ...
- Java学习笔记:2022年1月13日(其一)
Java学习笔记:2022年1月13日(其一) 摘要:这篇笔记主要讲解了Java中的自定义类.以及构造一个类时所需要了解的一些重点知识. 目录 Java学习笔记:2022年1月13日(其一) 1. ...
- 浪 - Java
如果你的计算机还没有安装 Java, 这篇说明很适合你. OpenJDK 下载地址 历史版本归档 环境配置 cd ~/.local wget https://download.java.net/jav ...
- 【高并发】AQS中的CountDownLatch、Semaphore与CyclicBarrier用法总结
CountDownLatch 概述 同步辅助类,通过它可以阻塞当前线程.也就是说,能够实现一个线程或者多个线程一直等待,直到其他线程执行的操作完成.使用一个给定的计数器进行初始化,该计数器的操作是原子 ...
- 面试官:JVM是如何判定对象已死的?
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 知道的越多,才知知道的越少.--苏格拉底 目录 引用计数算法 可达性分析算法 引用类型 ...