字
字节笔记本
2026年5月3日
PM2 - Next.js 生产环境进程管理
API中转
¥120
本文介绍使用 PM2 管理 Next.js 生产环境进程的完整方案,包括配置文件编写、部署流程、日志管理和故障排除。
概述
PM2 是一个先进的 Node.js 进程管理器,用于在生产环境中保持应用程序永久运行,提供负载均衡和性能监控。
核心配置
ecosystem.config.js 配置文件
javascript
module.exports = {
apps: [{
name: 'nextjs-app',
script: 'npm',
args: 'start',
env: {
PORT: 3002,
NODE_ENV: 'production'
},
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G'
}]
}配置参数说明
| 参数 | 说明 | 值 |
|---|---|---|
name | 应用名称 | nextjs-app |
script | 启动脚本 | npm |
args | 启动参数 | start |
env.PORT | 端口号 | 3002 |
env.NODE_ENV | 运行环境 | production |
instances | 实例数量 | 1 |
autorestart | 自动重启 | true |
watch | 监听文件变化 | false |
max_memory_restart | 内存限制 | 1G |
常用命令
基础操作
bash
# 启动应用
pm2 start ecosystem.config.js
# 查看所有进程
pm2 list
# 查看日志
pm2 logs nextjs-app
# 重启应用
pm2 restart nextjs-app
# 停止应用
pm2 stop nextjs-app
# 删除应用
pm2 delete nextjs-app
# 重启所有
pm2 restart all
# 停止所有
pm2 stop all
# 删除所有
pm2 delete all持久化操作
bash
# 保存当前进程列表
pm2 save
# 开机自启动
pm2 startup
# 监控
pm2 monitor部署流程
完整部署步骤
bash
# 1. 构建应用
npm run build
# 2. 创建配置文件
cat > ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'nextjs-app',
script: 'npm',
args: 'start',
env: {
PORT: 3002,
NODE_ENV: 'production'
},
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G'
}]
}
EOF
# 3. 启动应用
pm2 start ecosystem.config.js
# 4. 保存进程列表
pm2 save
# 5. 设置开机自启
pm2 startup端口管理
端口冲突处理
当遇到 EADDRINUSE 错误时:
bash
# 方案1:使用不同端口
PORT=3002 npm run start
# 方案2:查找并停止占用端口的进程
lsof -ti:3000 | xargs kill -9
# 方案3:使用 PM2 自动管理端口
# 在 ecosystem.config.js 中设置不同的 PORT进程状态
查看进程详情
bash
pm2 list输出示例:
text
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ nextjs-app │ cluster │ 0 │ online │ 0% │ 56.1mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘状态说明
| 状态 | 说明 |
|---|---|
online | 正在运行 |
stopped | 已停止 |
errored | 错误状态 |
launching | 正在启动 |
日志管理
查看日志
bash
# 查看所有日志
pm2 logs
# 查看特定应用日志
pm2 logs nextjs-app
# 实时监控日志
pm2 logs --lines 100
# 清空日志
pm2 flush监控和性能
实时监控
bash
# 打开监控面板
pm2 monitor
# 查看详细信息
pm2 show nextjs-app故障排除
常见问题
1. 应用无法启动
症状: pm2 start 后应用立即停止
解决方案:
bash
# 检查日志
pm2 logs nextjs-app --lines 50
# 检查端口占用
lsof -i:3002
# 检查构建文件
ls -la .next/2. 内存泄漏
症状: 内存持续增长
解决方案:
javascript
// 在 ecosystem.config.js 中设置内存限制
max_memory_restart: '1G' // 超过1G自动重启3. 应用崩溃
症状: 进程频繁重启
解决方案:
bash
# 查看错误日志
pm2 logs --err
# 增加重启延迟
autorestart: true,
kill_retry: 10, // 10秒后重启
min_uptime: '10s' // 最小运行时间高级配置
集群模式
javascript
module.exports = {
apps: [{
name: 'nextjs-app',
script: 'npm',
args: 'start',
instances: 4, // 启动4个实例
exec_mode: 'cluster' // 集群模式
}]
}环境变量管理
javascript
module.exports = {
apps: [{
name: 'nextjs-app',
script: 'npm',
args: 'start',
env_production: {
NODE_ENV: 'production',
PORT: 3002
},
env_development: {
NODE_ENV: 'development',
PORT: 3000
}
}]
}访问地址
应用启动后可通过以下地址访问:
-
本地:
http://localhost:3002 -
网络:
http://148.135.67.61:3002 -
域名:
https://skillslm.com/(需配置反向代理)
最佳实践
-
✅ 始终使用配置文件 - 便于版本控制和团队协作
-
✅ 设置内存限制 - 防止内存泄漏导致服务器崩溃
-
✅ 启用日志记录 - 便于问题排查
-
✅ 配置开机自启 - 确保服务器重启后应用自动启动
-
✅ 使用版本管理 - 避免配置文件丢失
相关链接
分享: