pm2简易手册

PM2 使用手册

对于线上项目,如果直接通过 node app 来启动,如果报错了可能直接停止导致整个服务崩溃,一般监控 node 有几种方案。

  • supervisor: 一般用作开发环境的使用。
  • forever: 管理多个站点,一般每个站点的访问量不大的情况,不需要监控。
  • PM2: 网站的访问量比较大,需要完整的监控页面。

开发是使用的是nodemon,部署是后端人员操作,一直没有深入使用过pm2,这次部署next项目,正好熟习一下。


PM2 的主要特性

  1. 内建负载均衡(使用 Node cluster 集群模块)
    后台运行
  2. 0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  3. 具有 Ubuntu 和 CentOS 的启动脚本
  4. 停止不稳定的进程(避免无限循环)
  5. 控制台检测
  6. 提供 HTTP API
  7. 远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )

用法

基本启动命令

pm2 start

// start命令启动对应的node server文件

1
pm2 start ./build/server.js

通过配置文件进行启动稍后详细讲解
启动之后,控制台会看到如下消息:

如上图所示,可以看到项目next成功启动,id 是 2,3,并且状态时 online.之所以有两个,是因为在配置文件开了负载均衡,下面会说。

  • 查看详细状态信息

pm2 show (appname|id)

1
$ pm2 show 2或pm2 show next

如上图所示,可以查看到 next 进程的详细信息

  • 查看所有启动的进程列表

    1
    pm2 list

  • 监控每个 node 进程的 cpu 和内存使用情况

    1
    pm2 monit

    可以使用 pm2 monit 功能监控所有 node 进程的运行情况,包括各种响应,错误信息。

  • 显示所有进程的日志信息

    1
    pm2 logs
  • 监控运行这些进程的机器的状态

    1
    pm2 web


    在浏览器打开上图中的地址:0.0.0.0:9615, 可以看到本机的各种信息。

  • 停止 指定/所有 进程

    1
    pm2 stop (id|all)

    // 停止id为0的进程
    $ pm2 stop 0
    // 停止所有进程
    $ pm2 stop all

  • 重启 指定/所有 进程

1
pm2 restart (id|all)

// 重启id为0的进程
$ pm2 restart 0
// 重启所有进程
$ pm2 restart all

  • 杀死 指定/所有 进程
1
pm2 delete (id|all)

// 杀死id为0的进程
$ pm2 delete 0
// 杀死所有进程
$ pm2 delete all

配置 PM2 启动文件

pm2 启动的方式可以进行很多的扩展,比如设置环境,设置错误信息打印,设置输入信息打印等等高级功能。那么一条命令就不能完成这些任务, pm2 提供了配置文件的方式来启动.

pm2.config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module.exports = {
apps: [
{
// 指定解释器 :ts用
interpreter: './node_modules/.bin/ts-node',
// 解释器参数 -P 表示项目路径,会自动使用项目的 tsconfig.json
interpreter_args: '-P ./ -r tsconfig-paths/register',
name: 'next', // 应用名称
script: './server.ts', // 启动文件地址
cwd: './', // 当前工作路径
watch: [
// 监控变化的目录,一旦变化,自动重启
'.next',
],
ignore_watch: [
// 从监控目录中排除
'node_modules',
'logs',
'static',
],
instances: 2, // 负载均衡,启动2个实例
node_args: '--harmony', // node的启动模式
env: {
NODE_ENV: 'production', // 设置运行环境,此时process.env.NODE_ENV的值就是development
},
env_production: {
NODE_ENV: 'production',
},
out_file: './logs/out.log', // 普通日志路径
error_file: './logs/err.log', // 错误日志路径
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm Z',
},
],
};

负载均衡

最 666 的功能来了~自动给你做负载均衡,只需要一条命令,以前那些复杂的概念懂不懂无所谓。

1
pm2 start server.js -i (number|max)
  • 开启三个进程运行项目
    1
    pm2 start app.js -i 3
  • 根据机器CPU核数,开启对应数目的进程运行项目
    1
    pm2 start app.js -i max
    配置文件里对应的:”instance”: (number|max)
    // pm2.config.js
    “instances”: 2, // 启动两个实例
分享到 评论