为什么Node应用需要PM2

Node应用跑在服务器上,我们不直接运行node应用,而是通过pm2来跑。为什么需要用pm2呢?

image-20230508214003757

pm2是什么

官网文档

PM2 是一个守护进程管理器,它将帮助您管理和保持您的应用程序在线。

pm2是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。

最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态。

为什么要用pm2

回答这个问题前,我们不妨先想一想:

  • 如果你的 node 应用跑的时候突然抛了个错,崩溃了,是不是需要重新跑起来?这时候是不是就需要另一个进程来自动做重启这件事情?

  • node 应用的日志默认输出在控制台,如果想输出到不同的日志文件,是不是可以让另一个进程获取 node 应用的输出,然后写文件来实现?

  • node 是单线程的,而机器是多个 cpu 的,为了充分利用 cpu 的能力,我们会用多个进程来跑 node 应用,这种通用逻辑是不是也可以放到一个单独进程里来实现?

  • node 运行时的 cpu、内存等资源的占用,是不是需要监控?这时候是不是可以让另一个进程来做?

线上的 node 应用不只是跑起来就行了,还要做自动重启、日志、多进程、监控这些事情。而这些事情, pm2可以担当。

再来看看使用pm2可拥有的能力:

  • 日志管理;两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
  • 负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许以零秒停机时间重新启动应用程序。
  • 终端监控:可以在终端中监控应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。
  • SSH部署:自动部署,避免逐个在所有服务器中进行ssh。
  • 静态服务:支持静态服务器功能
  • 支持开发调试模式,非后台运行,pm2-dev start <appName>
  • ……

相关链接

[1] 为什么 Node 应用要用 PM2 来跑?