Nodejs学习笔记(十三)—PM2
简介
PM2
pm2是一个内置负载均衡的node.js应用进程管理器(也支持Windows),其它的类似功能也有不少,但是感觉pm2功能更强,更值的推荐
GitHub地址:https://github.com/Unitech/pm2
API Docs:http://pm2.keymetrics.io/docs/usage/cluster-mode/
NPM地址:https://www.npmjs.com/package/pm2
pm2安装
官方安装说明: http://pm2.keymetrics.io/docs/usage/quick-start/
npm install pm2 -g
安装成功如下图

查看版本
pm2 -v
各平台安装方法一致
操作
我这里有个express的web项目:pm2sample,端口是11111
启动
pm2 start app.js
成功如下图

这样就可以通过http://localhost:11111 来访问
关闭
pm2 stop 0
为什么stop后是0? 从上图可以看出进程ID为0,所以通过进程ID可以关闭,然后这种方式不易记,下面我看看其它方式启动和关闭
其它方式启动/关闭
启动项目,并命名一个应用程序名
pm2 start app.js --name test
启动后结果如下图,你可以看到App name

根据App name关闭项目
pm2 stop test
可以自行试一下效果,关闭成功!
从PM2中删除
pm2 delete test
当然也可以pm2 delete 进程ID
重载和重启
当应用程序代码有更新,可以用重载来加载新代码,也可以用重启来完成
pm2 reload test
pm2 restart test
reload可以做到0秒宕机加载新的代码,restart则是重新启动,生产环境中多用reload来完成代码更新!
查看详情
pm2 show test
输出如下图

通过查看详情就可以看到很多有用信息,包含日志和错误输出的文件路径(感觉日志是用的比较多的)
多项目操作
上面是单项目操作,多项目操作是如何呢?
启动其它项目也如上面命令,我新启一个项目:pm2sample2(端口为11112)
cd 项目目录
pm2 start app.js --name test2
启动后如下图

想要对这2个项目进行批量操作(多个也一样),如下(重加载全部/停止全部/重启全部/删除全部)
pm2 reload all
pm2 stop all
pm2 restart all
pm2 delete all
集群
上面从图中可以看出mode是“fork”
开发环境中多以fork的方式启动,生产环境中多用cluster方式启动
启动方式
pm2 start app.js -i 2 --name test
这表示启动2个并命名为test,在后台以cluster方式运行

从上图可以看出mode为“cluster”方式,其它操作就可以通过上面用过的方式去启动、关闭、重载、重启、删除
其它操作
watching
上面的示例图中可以看一“watching”一项,这个项默认是disabled,可以通过如下命令开启
pm2 start app.js --name test --watch
上面的命令中启去吧了test项目并开启了watching,这个用处主要更新代码后,不用重载或重启项目即可以立即让更新的代码起作用
建议:这个适合在开发时用,可以省不少时间,生产环境下最好不要用
list
pm2 list
可以列出pm2中所有项目
monit
pm2 monit

用monit可以打开实时监视器去查看资源占用情况
logs
pm2 logs
通过上面命令可以实时查看日志输出情况(当然,我更习惯去日志文件里看)
写在之后
本篇主要对PM2常用命令进行说明
PM2还有其它很多其它功能,可以通过上面提供的api链接去查看
但是基本用上面这些命令就够了,现在项目中就用的PM2,感觉还是不错,用于生产环境完全没问题!
此系列的源代码可到http://bijian1013.iteye.com/blog/2425085下载。
文章来源:https://www.cnblogs.com/zhongweiv/p/pm2.html
Nodejs学习笔记(十三)—PM2的更多相关文章
- Nodejs学习笔记(四)——支持Mongodb
前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
- NodeJS学习笔记之Connect中间件模块(一)
NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
随机推荐
- 【PAT Advanced Level】1015. Reversible Primes (20)
转换进制&&逆序可以在一起进行,有一点技巧,不要用十进制数来表示低进制,容易溢出. #include <iostream> #include <vector> ...
- java web eclipse中项目的加载过程
java web eclipse中项目的加载过程: Tomcat默认从WEB-INF/目录下加载资源,Eclipse在发布程序的时候,并没有把User Libraries的相关资源拷贝到WEB-INF ...
- [leetcode] 17. Merge Two Sorted Lists
这个非常简单的题目,题目如下: Merge two sorted linked lists and return it as a new list. The new list should be ma ...
- Python学习-33.Python中glob模块的一些参数
glob模块中有一个叫glob的方法可以获取某个目录下的文件. import glob temp=glob.glob("E:\\Temp\\*.txt") print(temp) ...
- ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。
首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...
- flume 整合kafka
背景:系统的数据量越来越大,日志不能再简单的文件的保存,如此日志将会越来越大,也不方便查找与分析,综合考虑下使用了flume来收集日志,收集日志后向kafka传递消息,下面给出具体的配置 # The ...
- 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...
- 枚举类型内部函数 enumerate
enumerate()说明enumerate()是python的内置函数enumerate在字典上是枚举.列举的意思对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumera ...
- 安装gitlab
安装源: git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-10-stable gitlab 安装文档: 在github上:gitl ...
- Unity色子的投掷与点数的获得(详解)
前几天需要一个色子的投掷并且获得朝上点数的Unity脚本,在网上找了很多,都是一个模子刻出来的. 对于2018版的我来说,网上找的都是很早就弃用了的老版本. 好不容易能运行了,结果并不理想,于是又突发 ...