pm2使用心得

偶尔善良 提交于 2020-02-29 09:50:27

pm2和forever是启动Nodejs服务常用到的两个工具。使用这两个指令可以使node服务在后台运行(类似于linux的nohup),另外它们可以在服务因异常或其他原因被杀掉后进行自动重启。 由于Node的单线程特征,自动重启能很大程度上的提高它的健壮性。 本文不对比两者工具优劣,只是结合自己的使用,简要介绍如何在工程部署时更好的使用pm2。

基本指令 npm install pm2 -g : 全局安装。 pm2 start app.js : 启动服务,入口文件是app.js。 pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。 npm restart [name or id] : 重启服务。 npm reload [name or id] : 和rastart功能相同,但是可以实现0s的无缝衔接;如果有nginx的使用经验,可以对比nginx reload指令。 pm2 start app.js --max_memory_restart 1024M : 当内存超过1024M时自动重启。 如果工程中有比较棘手的内存泄露问题,这个算是一个折中方案。 pm2 monit : 对服务进行监控。

更多的指令可以参考 PM2 介绍

高级用法 pm2支持配置文件启动: pm2 ecosystem: 生成配置文件ecosystem.json pm2 startOrRestart /file/path/ecosystem.json : 通过配置文件启动服务

如下是我开发时ecosystem.json的内容:


  {
    /**
    * Application configuration section
    * http://pm2.keymetrics.io/docs/usage/application-declaration/
    * 多个服务,依次放到apps对应的数组里
    */
    apps : [
    // First application
        {
            name      : "nova",
            max_memory_restart: "300M",
            script    : "/root/nova/app.js",
            out_file : "/logs/nova_out.log",
            error_file : "/logs/nova_error.log",
            instances  : 4,
            exec_mode  : "cluster",
            env: {
                NODE_ENV: "production"
            }
        }
    ]
 }

上述采用cluster模式启动了4个服务进程;如果服务占用的内存超过300M,会自动进行重启。

监控工具 pm2的监控功能是其一大特色,它提供的监控服务Keymetrics monitoring 很酷炫,感兴趣的可以配置玩一下。

一些思考

  1. 服务进程数 至于要启动几个进程,可以通过服务器的内核数进行确定,几个内核就启动几个服务。指令如下:

查看物理CPU个数

cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑CPU的个数

cat /proc/cpuinfo| grep "processor"| wc -l 当然可以启动多个端口,一个端口号对应一个服务,这样的话就需要nignx来做负载均衡了。

  1. 是否需要nginx nginx可以做的事情主要有两个:

反向代理,实现简单的负载均衡: 如果有多台服务器或者一台服务器多个端口,可以考虑用nginx。 静态资源缓存:把一些静态资源(如静态页面,js等资源文件)放到nginx里,可以极大的提高服务的性能。 3. 自动化部署 通过shell脚本实现资源拉取、服务重启、nginx缓存更新等操作,再配合pm2的监控功能,就初步达到了一个后端工程部署的标配了

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!