PM2 Node.js 进程管理器:完整指南与实战教程
1. 什么是 PM2 以及为什么需要它
PM2(Process Manager 2)是一款专为 Node.js 应用设计的生产级进程管理器。它能够启动、停止、重启和监控 Node.js 应用,确保应用的高可用性和容错能力。PM2 会自动重启崩溃的进程,在多个应用实例之间分配负载(集群模式),提供内置负载均衡器,并支持无中断的优雅重启。
在生产环境中,Node.js 应用经常会遇到意外错误、内存泄漏或过载问题。PM2 作为“守护进程”解决了这些问题:它监控每个进程的状态,记录 stdout/stderr 日志,提供性能指标(CPU、内存),并允许通过 CLI 或 API 管理应用。如果没有 PM2,开发者需要手动编写重启、监控和扩展脚本——PM2 将这些任务全部自动化。
PM2 的核心功能包括:集群模式(在所有 CPU 核心上运行多个工作进程)、零停机重启、环境管理(开发/生产)、内置监控(pm2 monit)、配置文件支持(ecosystem.config.js)以及与系统初始化工具(systemd、upstart)集成,实现服务器启动时自动运行。
2. 安装 PM2
PM2 通过 npm(Node 包管理器)全局安装。具体命令如下:
npm install -g pm2
安装指定版本:
npm install -g pm2@5.3.0
安装完成后,验证版本:
pm2 --version
3. 快速上手——最小工作示例
创建一个简单的 Node.js 应用 app.js:
// app.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from PM2!\n');
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
通过 PM2 启动应用:
pm2 start app.js --name my-app
查看运行状态:
pm2 status
停止应用:
pm2 stop my-app
4. 核心方法详解
4.1. pm2.start()——启动应用
函数签名: pm2.start(script, options, callback)
功能说明: 使用指定的选项(名称、实例数量、环境变量)将脚本作为 PM2 进程启动。
代码示例:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start({
script: 'app.js',
name: 'my-app',
instances: 2, // 启动 2 个实例
exec_mode: 'cluster', // 集群模式
env: {
NODE_ENV: 'production',
PORT: 3000
}
}, (err, apps) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('应用已启动:', apps);
pm2.disconnect();
});
});
4.2. pm2.stop()——停止进程
函数签名: pm2.stop(process, callback)
功能说明: 停止指定的进程(按名称、ID 或停止所有进程)。
代码示例:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
// 停止名为 'my-app' 的进程
pm2.stop('my-app', (err, proc) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('进程已停止:', proc);
pm2.disconnect();
});
});