使用 PM2 管理 Node.js 应用的生命周期
在现代的 web 开发中,Node.js 已经成为了一个非常流行的选择,它的非阻塞 I/O 模型和多线程架构使得它可以处理高并发的请求。然而,当我们构建和部署 Node.js 应用时,如何有效地管理应用的生命周期就是一个需要我们重视的问题。这里介绍的 PM2(Process Manager 2)是一个强大的进程管理工具,能够帮助我们轻松管理 Node.js 应用的启动、停止、重启及监控其运行状态。
1. 什么是 PM2
PM2 是一个带有负载均衡和高可用性的 Node.js 进程管理器。它可以让你轻松地启动、停止、重新启动和监控 Node.js 应用,而且提供了集群模式支持,可以充分利用多核 CPU 的优势。PM2 还支持进程守护,确保应用在崩溃时恢复运行。
2. 安装 PM2
在开始之前,我们需要确保已经安装 Node.js。接下来,你可以使用 npm(Node.js 包管理器)来安装 PM2:
npm install -g pm2
安装完成后,你可以通过命令 pm2 -v
来验证 PM2 是否安装成功。
3. 运行 Node.js 应用
假设我们有一个简单的 Node.js 应用 app.js
,它的内容如下:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
为了使用 PM2 管理这个应用,我们只需要运行以下命令:
pm2 start app.js
这行命令会启动你的应用,并将其添加到 PM2 的进程列表中。
4. 管理进程
PM2 提供了多种命令来管理你的 Node.js 应用进程,比如:
- 查看所有进程的状态:
pm2 list
- 查看特定进程的详细信息:
pm2 show <app-id>
- 停止一个运行的应用:
pm2 stop <app-id>
- 重启应用:
pm2 restart <app-id>
- 删除已停止的应用:
pm2 delete <app-id>
5. Cluster 模式
PM2 还提供了集群模式支持,能够在多核 CPU 系统上更好地利用资源。要使用集群模式,只需要在启动应用时使用 -i
参数:
bash
pm2 start app.js -i max
这里 `max` 的意思是使用所有可用 CPU 核心。你也可以具体指定要使用的进程数,例如 `pm2 start app.js -i 4`。
## 6. 监控应用运行状态
PM2 除了能够管理进程外,还能实时监控应用的性能。你可以使用命令来查看 CPU 和内存使用情况:
```bash
pm2 monit
这个命令会打开一个交互式界面,显示每个进程的 CPU、内存使用情况以及其他相关指标。
7. 日志管理
PM2 还提供了简单的日志管理功能,它会为每个进程创建单独的日志文件。你可以使用以下命令来查看应用日志:
pm2 logs <app-id>
你还可以将日志保存到文件中,设置日志的保留时间等,使用如下命令:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M # 设置日志最大尺寸
pm2 set pm2-logrotate:retain 30 # 设置保留30天的日志
8. 开机自启
为了保证你的应用在服务器重启后能够自动启动,PM2 提供了一条简单的命令:
pm2 startup
执行命令后,会输出一条命令,在终端复制并运行即可。PM2 会根据你的配置生成对应的启动脚本,并把你的应用加入到开机自启列表中。
9. 监控和管理
PM2 还可以和外部服务集成,比如使用 Keymetrics 来进行远程监控。你只需创建账户并按照相关文档将 PM2 和 Keymetrics 集成。
以下是一些常用的管理和监控命令:
- 重载应用(不会中断连接):
pm2 reload <app-id>
- 导出当前进程配置:
pm2 save
- 从文件中加载应用配置:
pm2 resurrect
结论
PM2 是一个非常强大的工具,它不仅可以管理 Node.js 应用的生命周期,还能够监控应用的性能、日志,并支持多种高级特性。通过简单的命令,我们就能轻松控制应用的运行状态,为我们节省了许多时间和精力。在 Node.js 应用越来越复杂的今天,PM2 已经成为了开发者的得力助手。