使用PM2管理Node项目 ——nodejs

234 阅读2分钟

思考

1.如何上线Node编写的程序?

上线项目需要考虑的几个问题

1.1 服务稳定性,不会因为程序的某个错误或者异常导致项目停止服务

1.2 线上日志记录,除了记录访问日志外,我们还要记录错误日志和自定义日志

1.3 充分利用服务器资源,Node是单线程的,服务器是多核的,一台服务器只运行一个Node程序太浪费资源

2.如何解决上述问题?

通过PM2

2.1 PM2的进程守护可以在程序崩溃后自动重启

2.2 PM2自带的日志记录功能,可以很方便的记录错误的日志和自定义日志

2.3 PM2可以启动多个Node进程,充分利用服务器资源

3.PM2的使用

npm i pm2 -g

pm2 --version

//app.js 是入口文件
pm2 start app.js 

4.常用指令和配置

1.常用命令

pm2 start app.js|config        //启动应用程序
pm2 list                       //列出启动的所有应用程序
pm2 restart appName|appId      //重启应用程序
pm2 info appName|appId         //查看应用程序详细信息
pm2 log appName|appId          //显示指定应用程序的日志
pm2 monit appName|appId        //监控应用程序
pm2 stop appName|appId         //停止程序
pm2 delete appName|appId       //关闭并删除应用程序

2. pm2的常用配置

   //pm2.config.json
   {
       "app":{
           "name":"mynode",
           "script":"app.js",
           "watch":"true",   //是否需要自动重启和更新
           "ignore_watch":[  //下列文件变化不需要监听
               "node_modules",
               "logs"
           ],
           "error_file":"logs/错误日志文件名",
           "out_file":"logs/自定义日志文件名",
           "log_date_format":"YYYY-MM-DD HH:mm:ss"
       }
   
   }

3.负载均衡

在配置文件中增减instance配置,想启动几个进程就写几个(不要超过cpu的核数) 日志文件分数会有对应启动的个数。

   //pm2.config.json
   {
       "app":{
           "name":"mynode",
           "script":"app.js",
           "watch":"true",   //是否需要自动重启和更新
           "ignore_watch":[  //下列文件变化不需要监听
               "node_modules",
               "logs"
           ],
           "error_file":"logs/错误日志文件名",
           "out_file":"logs/自定义日志文件名",
           "log_date_format":"YYYY-MM-DD HH:mm:ss",
           "instance":"4"  //负载的个数
       }
   
   }