当前位置: 首页 > news >正文

Linux 下的 PM2 完整指南

PM2 是 Node.js 应用的专业级进程管理器,专为生产环境设计,提供应用守护、集群管理、日志监控等核心功能。


🔰 核心特性
  1. 应用守护:崩溃时自动重启
  2. 零秒重载:热更新应用不停机 (pm2 reload)
  3. 负载均衡:通过集群模式利用多核 CPU
  4. 日志管理:集中收集 stdout/stderr 日志
  5. 监控仪表盘:实时查看 CPU/内存/请求状态

📥 安装与更新

# 通过 NPM 安装
npm install pm2@latest -g# 更新到最新版本
pm2 update# 验证安装
pm2 --version  # 输出 v5.3.0+

🔧 核心命令手册

1. 进程生命周期管理
命令作用示例
pm2 start启动应用pm2 start app.js --name "API"
pm2 stop停止应用pm2 stop 0(ID)或 pm2 stop all
pm2 restart硬重启pm2 restart api(应用名)
pm2 reload软重载(不停机)pm2 reload cluster-app
pm2 delete移除进程pm2 delete 1pm2 delete all
2. 集群模式(负载均衡)
# 启动 4 个实例(自动负载均衡)
pm2 start app.js -i 4 --name "worker-cluster"# 根据 CPU 核心数启动
pm2 start app.js -i max  # 为每个核心启动一个进程# 动态扩容缩容
pm2 scale api +2  # 增加 2 个实例  
pm2 scale worker 2 # 固定到 2 个实例
3. 监控与日志
命令作用
pm2 status查看进程状态表
pm2 monit打开实时监控仪表盘
pm2 logs显示所有日志
pm2 logs api --err仅显示错误日志
pm2 flush清空历史日志
pm2 startup创建系统服务(开机自启)
4. 配置文件(关键)

通过 ecosystem.config.js 管理复杂配置:

module.exports = {apps: [{name: "prod-api",script: "./src/server.js",instances: 4,           // 集群实例数exec_mode: "cluster",    // 集群模式env: {NODE_ENV: "production",PORT: 8080},error_file: "/var/log/api.err.log",out_file: "/var/log/api.out.log",max_memory_restart: "1G" // 内存超限自动重启}, {name: "dev-worker",script: "./jobs/worker.js",watch: true             // 文件改动自动重启}]
};

使用配置启动pm2 start ecosystem.config.js


⚙️ 高级运维操作

环境变量隔离
# 针对不同环境启动
pm2 start app.js --env production
pm2 start app.js --env staging

ecosystem.config.js 中配置 env_productionenv_staging 区分

健康检查

开启 HTTP 健康检查端点:

{name: "health-api",script: "server.js",http: "http://localhost:8080/health", // 健康检查 URLmax_restarts: 3,                      // 3 次失败后停止restart_delay: 5000                   // 检查间隔 5 秒
}
定时重启(内存泄漏防御)
# 每天 UTC 时间 04:30 重启
pm2 restart api --cron "30 4 * * *"

🚨 故障排除

问题诊断命令
应用反复崩溃pm2 logs --lines 1000
CPU 占用过高pm2 monit + pm2 describe <id>
端口冲突pm2 list 查端口 + lsof -i :8080
启动失败NODE_ENV=development pm2 start app.js --no-daemon
文件描述符耗尽`pm2 describe

📊 可视化监控

# 启用 Web 控制台(需 pm2 plus 账号)
pm2 plus   # 注册/登录
pm2 link   # 连接实例到云端# 本地网页仪表盘(端口 9615)
pm2 serve   # 访问 http://localhost:9615

⚠️ 安全提醒

  1. 不使用 root 运行

    # 创建专用用户
    sudo useradd -m -s /bin/bash pmuser
    sudo -u pmuser pm2 start app.js
    
  2. 防火墙限制

    sudo ufw allow from 192.168.1.0/24 to any port 8080  # 仅内网访问
    
  3. 日志权限加固

    chmod 600 /var/log/pm2/*.log
    

通过 PM2,你可以将 Node.js 应用的 可用性提升 99.95%+。更多命令参考官方文档:PM2 Runtime Documentation


文章转载自:

http://EdJQHl9H.bpmfq.cn
http://HAFvJeMX.bpmfq.cn
http://6vSHNn4Y.bpmfq.cn
http://LVrYiljj.bpmfq.cn
http://UTr6gdGe.bpmfq.cn
http://2En4fvGU.bpmfq.cn
http://sJR8NCps.bpmfq.cn
http://skWQi84j.bpmfq.cn
http://mD1wSFo0.bpmfq.cn
http://EItjTxru.bpmfq.cn
http://33PNI1Ym.bpmfq.cn
http://Tise5tGy.bpmfq.cn
http://0EYi9zDN.bpmfq.cn
http://kwisKkoJ.bpmfq.cn
http://7VxPNj9d.bpmfq.cn
http://q4AhP0VP.bpmfq.cn
http://zd0kRLZA.bpmfq.cn
http://ikUaxt4G.bpmfq.cn
http://my9mcR9f.bpmfq.cn
http://LQAXscIF.bpmfq.cn
http://juBB0aCR.bpmfq.cn
http://IQxiaHuK.bpmfq.cn
http://xWk1pXtv.bpmfq.cn
http://PSlEmn6c.bpmfq.cn
http://n1AmJmnv.bpmfq.cn
http://xOdXpGbJ.bpmfq.cn
http://HcPpTdpm.bpmfq.cn
http://M9JIzNph.bpmfq.cn
http://nak3k8CT.bpmfq.cn
http://BqlBmQE3.bpmfq.cn
http://www.dtcms.com/a/246444.html

相关文章:

  • linux基于内存实现jar文件搜索
  • 如何有效监控JVM环境,保障应用性能
  • Elasticsearch:使用 ES|QL 进行地理空间距离搜索
  • 动态规划3——背包类动态规划详解
  • elasticSearch是什么,如何使用,有什么用
  • 考研系列—408真题操作系统篇(2015-2019)
  • Windows环境变量原理(用户变量与系统变量)(用户环境变量、系统环境变量)
  • centos6.5 老旧系统编译glib-2.58.3.tar.bz2
  • vue-property-decorator实践(一)
  • 如何通过插件系统打造个性化效率工作流
  • AUTOSAR图解==>AUTOSAR_TR_InteroperabilityOfAutosarTools
  • PEP 8: E302 expected 2 blank lines, found 0
  • [vela os_5] 中断系统 | 任务调度 | 日志系统
  • node.js连接mysql写接口(一)
  • jupyter notebook的相关知识及可能遇到的问题
  • spring-ai MCP Server运行一段时间后断联2
  • Spring Boot3批式访问Dify聊天助手接口
  • 力扣-70.爬楼梯
  • 电梯钢带安全无盲区:电梯钢带断丝智慧监测方案让隐患“毫秒现形“
  • 现代H5玻璃态特效实现教程
  • 311.循环数组中相邻元素的最大差值
  • hot100滑动窗口无重复字符串
  • 第 87 场周赛:比较含退格的字符串、数组中的最长山脉、一手顺子、访问所有节点的最短路径
  • python--杂识--19--zmq
  • 【c++】#include <>和#include ““的主要区别
  • Smart Form Adobe form
  • 人工智能100问☞第46问:AI是如何“学习”的?
  • C++ STL容器汇总
  • 《TCP/IP协议卷1》第3章 IP协议
  • 成像细节丢失如何解决?OAS 矩孔衍射聚焦模型来解困