咔斯Sama
文章32
标签14
分类6
NodeJs - PM2

NodeJs - PM2

NodeJs - PM2

前言

刚刚说ubuntu启动node服务遇到问题时,提到了pm2,那就顺便记录一下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

使用体会:

  1. 简单易用、后台运行、快速部署,常用到的命令就几个
  2. 可轻松集群模式启动
  3. 可以无宕机重暂应用程序,保持不断连接的情况下轻松重载代码
  4. 完善的日志
  5. 自动停止不稳定的进程
  6. 保活应用程序

pm2安装

官方安装说明: http://pm2.keymetrics.io/docs/usage/quick-start/

安装指令:npm install pm2 -g
安装成功如下:

root@VM-16-5-ubuntu:/home/ubuntu# npm install pm2 -g
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.

added 184 packages, and audited 185 packages in 16s

12 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
root@VM-16-5-ubuntu:/home/ubuntu# 
root@VM-16-5-ubuntu:/home/ubuntu# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@VM-16-5-ubuntu:/home/ubuntu# ln -s /usr/sbin/nodejs/bin/pm2 /usr/local/bin/
root@VM-16-5-ubuntu:/home/ubuntu# pm2 list

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

查看版本:pm2 -v

各平台安装方法一致

操作

我这里有个express的web项目:NeteaseCloudMusicApi,端口是5188

启动

pm2 start app.js
image.png

关闭

pm2 stop 0
image.png
为什么stop后是0? 从上图可以看出进程ID为0,所以通过进程ID可以关闭,然后这种方式不易记,下面我看看其它方式启动和关闭

其它方式启动/关闭

启动项目,并命名一个应用程序名

pm2 start app.js --name="NeteaseCloudMusic"
启动后结果如下图,你可以看到App name
image.png

根据App name关闭项目

pm2 stop NeteaseCloudMusic
可以自行试一下效果,关闭成功!

从PM2中删除

pm2 delete NeteaseCloudMusic
当然也可以 pm2 delete 进程ID

重载和重启

当应用程序代码有更新,可以用重载来加载新代码,也可以用重启来完成
pm2 reload NeteaseCloudMusic
reload可以做到0秒宕机加载新的代码

pm2 restart NeteaseCloudMusic
restart则是重新启动,生产环境中多用reload来完成代码更新!

查看详情

pm2 show NeteaseCloudMusic
输出如下图:
image.png
通过查看详情就可以看到很多有用信息,包含日志和错误输出的文件路径(感觉日志是用的比较多的)  

多项目操作

上面是单项目操作,多项目操作是如何呢?

启动其它项目也如上面命令,我新启一个项目:pm2sample2(端口为5199)

  1. cd 项目目录
  2. pm2 start app.js --name test2

批量操作

批量操作(多个也一样),如下(重加载全部/停止全部/重启全部/删除全部)
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
image.png
用monit可以打开实时监视器去查看资源占用情况

logs

pm2 logs
通过上面命令可以实时查看日志输出情况

写在之后…

本篇主要对PM2常用命令进行说明

PM2还有其它很多其它功能,可以通过上面提供的api链接去查看

但是基本用上面这些命令就够了,现在项目中就用的PM2,感觉还是不错,用于生产环境完全没问题!

本文作者:咔斯Sama
本文链接:https://blog.kassama.top/nodejspm2.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可