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

NVM 与 单节点下PM2进程守护 安装配置以及使用教程完整指南(含 Node.js 环境搭建)

NVM与PM2安装配置指南

PM2是Node.js应用的守护进程管理器,可实现应用常驻后台、故障自动重启等功能。其依赖Node.js环境,因此需先通过NVM(Node Version Manager)管理Node.js版本,再完成PM2安装与使用。

一、NVM安装与配置

NVM用于灵活切换Node.js版本,适配不同项目的环境需求。

1.1 网络代理配置(可选)

若网络无法访问GitHub,需先配置Git代理,替换示例中的代理地址和端口。

# 设置全局Git代理
git config --global http.proxy http://192.168.87.1:7890
git config --global https.proxy http://192.168.87.1:7890# 如需取消代理,执行以下命令
# git config --unset http.proxy
# git config --unset https.proxy

1.2 安装NVM

执行以下命令下载并安装NVM(以v0.39.7版本为例,可替换为最新版本)。

# 修正原命令中的“url”为“curl”,确保命令可执行
curl -x http://192.168.87.1:7890 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  • 安装完成后,终端会输出环境变量配置命令,需手动复制执行,确保NVM生效。
  • 示例效果:
    NVM环境变量配置
    NVM安装成功验证

二、Node.js与npm安装

通过NVM安装指定版本的Node.js(示例为v18,可替换为需求版本,如v20),npm会随Node.js自动安装。

# 安装Node.js v18并切换为当前使用版本
nvm install 18 && nvm use 18
  • 执行完成后,可通过node -vnpm -v验证安装是否成功。
  • 示例效果:
    Node.js安装成功

三、PM2安装

使用npm全局安装PM2,确保在任意目录均可执行PM2命令。

# 安装最新版本的PM2
npm install pm2@latest -g
  • 安装完成后,通过pm2 --version验证版本。
  • 示例效果:
    PM2安装成功

四、PM2核心操作指南

4.1 PM2常用命令速查表

命令分类 命令示例 说明
基础启动 pm2 start <脚本> 启动应用(默认后台运行,如pm2 start app.js
pm2 start <脚本> --name "应用名" 启动时指定应用名(方便管理,如pm2 start app.js --name "api"
pm2 start <脚本> -- --port 3000 启动时传递参数(如指定端口,需用--分隔)
pm2 start <脚本> -i max 集群模式启动(max自动适配CPU核数,提升性能)
pm2 start <配置文件> 通过配置文件启动多应用(如pm2 start ecosystem.config.js
进程管理 pm2 list / pm2 status 查看进程列表(status显示CPU/内存占用详情)
pm2 stop <名称/ID> / pm2 stop all 停止指定进程或所有进程(如pm2 stop apipm2 stop 0
pm2 restart <名称/ID> / pm2 restart all 重启指定进程或所有进程
pm2 reload <名称/ID> 平滑重启(零停机,仅适用于集群模式)
pm2 delete <名称/ID> / pm2 delete all 从PM2列表中删除指定进程或所有进程
日志管理 pm2 logs / pm2 logs <名称/ID> 查看所有或指定进程的实时日志
pm2 logs --lines 100 查看最近100行日志
pm2 flush 清空所有日志
监控与信息 `pm2 monit 交互式面板,实时监控CPU、内存占用
pm2 describe <名称/ID> 查看指定进程的详细信息(环境变量、启动参数等)
pm2 report 生成应用性能分析报告
开机自启 pm2 startup 生成开机自启脚本(自动适配系统,如systemd)
pm2 save 保存当前进程列表,配合startup实现开机自启
pm2 unstartup 取消开机自启配置
其他 pm2 --help / pm2 --version 查看帮助文档或PM2版本
pm2 reset <名称/ID> 重置进程的重启统计次数

4.2 实操场景示例

场景1:启动项目进程

通过指定“启动命令”和“应用名”,创建PM2守护进程(示例为启动名为“tp8”的项目)。

pm2 start "<项目启动命令>" --name "<项目名称>"
# 示例:pm2 start "php think run" --name "tp8"
  • 示例效果:
    启动PM2进程

场景2:查看进程列表

查看所有已启动的PM2进程状态,包括进程ID、名称、CPU/内存占用等。

pm2 list
  • 示例效果:
    PM2进程列表

场景3:删除无用进程

删除不再需要的进程(需指定应用名或进程ID)。

pm2 delete "<项目名称>"
# 示例:pm2 delete "tp8"
  • 示例效果:
    删除PM2进程

场景4:集群模式启动(高并发优化)

通过-i max参数,让PM2根据CPU核数自动创建进程,提升应用并发能力。

pm2 start "<项目启动命令>" -i max --name "<项目名称>"
# 示例:pm2 start "app.js" -i max --name "api-server"

场景5:查看进程日志

实时查看指定进程的运行日志,用于排查错误或监控应用状态。

pm2 log "<项目名称>"
# 示例:pm2 log "tp8"
  • 示例效果:
    查看PM2日志

场景6:配置开机自启

确保服务器重启后,PM2进程自动恢复,无需手动启动。

  1. 生成自启脚本:
    pm2 startup
    
    • 示例效果:
      生成PM2自启脚本
  2. 保存当前进程列表:
    pm2 save
    
    • 示例效果:
      保存PM2进程列表

场景7:实时监控进程

通过交互式面板,实时查看进程的CPU、内存占用及日志输出。

pm2 monit
  • 操作说明:按Ctrl+C可退出监控面板。
  • 示例效果:
    PM2监控面板

场景8:生成性能报告

生成PM2及应用的详细性能报告,包含系统信息、进程状态、日志片段等,用于问题排查。

pm2 report
  • 报告示例(关键信息节选):
    --- PM2 report ----------------------------------------------------------------
    Date                 : Mon Oct 27 2025 07:59:16 GMT+0000 (Coordinated Universal Time)
    ===============================================================================
    --- Daemon -------------------------------------------------
    pm2d version         : 6.0.13
    node version         : 18.20.8
    user                 : root
    uptime               : 24min
    ===============================================================================
    --- PM2 list -----------------------------------------------
    ┌────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 0  │ tp8    │ default     │ N/A     │ fork    │ 17358    │ 4m     │ 0    │ online    │ 0%       │ 34.0mb   │ root     │ disabled │
    └────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
    
http://www.jsqmd.com/news/47076/

相关文章:

  • 北大六院的诊断
  • Pycharm远程连接服务器项目 - 实践
  • django项目前端模版文件,在pycahrm无法使用ctrl+alt+l格式化代码的解决办法
  • 北大六院后看又相
  • TPAMI 2025 | 从分离到融合:新一代3D场景技术建立双重能力提升!
  • 详细介绍:后端开发常用Linux命令
  • QT:Qt5.14向文档输出表格--编译异常信息
  • 《程序员修炼之道》阅读笔记5
  • java面向对象知识补充
  • 卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验
  • 全网都在找的Nano Banana Pro API 来了!便宜稳定0.15/张
  • 通过DataReader获取sql查询的字段元数据信息
  • 2025.11.21 - A
  • 2025年新版ADB工具箱下载+驱动+ADB指令集+fastboot刷机ROOT程序
  • P7960 [NOIP2021] 报数__洛谷题解
  • 与括号序列相关的 DP 笔记
  • 【251121】CF2171 Div.3 vp 总结
  • OI 笑传 #32
  • PyOpenGL实现Bresenham算法
  • 【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛 - 详解
  • 【第7章 I/O编程与异常】\r\n 和 \n\r是一回事吗?
  • 深入解析:windows显示驱动开发-CCD api的摘要及方案(一)
  • nju实验七 状态机及键盘输入
  • Gephi如何支持MySQL数据的复杂查询
  • Mozilla CI日志中暴露微软x-apikey的安全事件分析
  • Gephi怎样优化MySQL数据的展示效果
  • Gephi对MySQL数据的导入导出有何支持
  • 智能制造(MOM)-详细设计 - 智慧园区
  • nju实验六 移位寄存器及桶形移位器
  • P6727 [COCI 2015/2016 #5] OOP