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

PM2 完全指南:Node.js 应用后台启动、关闭与重启详解

文章目录

  • **PM2 完全指南:Node.js 应用后台启动、关闭与重启详解**
    • **1. 什么是 PM2?**
    • **2. 安装 PM2**
      • **全局安装**
      • **验证安装**
    • **3. 使用 PM2 启动 Node.js 应用**
      • **基本启动**
      • **指定应用名称**
      • **集群模式(多进程负载均衡)**
      • **监听文件变化自动重启(开发模式)**
    • **4. 查看运行中的应用**
      • **列出所有应用**
      • **查看应用详情**
    • **5. 关闭/停止 Node.js 应用**
      • **停止单个应用**
      • **停止所有应用**
      • **删除应用(从 PM2 列表移除)**
    • **6. 重启 Node.js 应用**
      • **普通重启**
      • **零停机重启(优雅重载)**
      • **重启所有应用**
    • **7. 日志管理**
      • **查看实时日志**
      • **查看最近 100 行日志**
      • **清空日志**
    • **8. 监控应用性能**
      • **实时监控 CPU/内存**
      • **生成性能报告**
    • **9. 开机自启动**
      • **保存当前 PM2 应用列表**
      • **设置开机自启动**
      • **取消开机自启动**
    • **10. 高级用法**
      • **环境变量管理**
      • **最大内存限制**
    • **11. 常见问题**
      • **Q1: PM2 启动后应用仍然退出?**
      • **Q2: 如何更新 PM2?**
      • **Q3: PM2 占用 CPU 过高怎么办?**
    • **12. 总结**


PM2 完全指南:Node.js 应用后台启动、关闭与重启详解

1. 什么是 PM2?

PM2 是 Node.js 最流行的进程管理工具之一,它可以帮助开发者:

  • 后台运行 Node.js 应用(即使关闭终端也不会停止)
  • 自动重启 崩溃的应用
  • 负载均衡(多进程模式)
  • 日志管理
  • 监控性能(CPU、内存)
  • 开机自启动

适用于生产环境部署,极大提升 Node.js 应用的稳定性和可维护性。


2. 安装 PM2

全局安装

管理员cmd窗口运行
npm install pm2 -g
安装windows自启动包
npm install pm2-windows-startup -g
执行命令
pm2-startup install 
查看是否安装成功
pm2 -v

如果安装失败(权限问题):

sudo npm install -g pm2  # Linux/macOS
npm install -g pm2 --unsafe-perm  # 绕过权限限制

验证安装

pm2 --version
# 输出示例:5.2.2

3. 使用 PM2 启动 Node.js 应用

基本启动

pm2 start app.js
  • 默认会在后台运行
  • 应用名称默认为 app(不带 .js

指定应用名称

pm2 start app.js --name "my-api"

集群模式(多进程负载均衡)

pm2 start app.js -i 4  # 启动 4 个实例(根据 CPU 核心数优化)

监听文件变化自动重启(开发模式)

pm2 start app.js --watch

4. 查看运行中的应用

列出所有应用

pm2 list
# 或
pm2 ls

输出示例:

┌─────┬───────────┬─────────────┬─────────┬─────────┬──────┬───────────┐
│ id  │ name      │ namespace   │ version │ mode    │ pid  │ uptime    │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────┼───────────┤
│ 0   │ my-api    │ default     │ 1.0.0   │ fork    │ 1234 │ 2D        │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────┴───────────┘
  • id:进程的唯一标识符
  • name:应用名称
  • pid:进程 ID
  • uptime:运行时间

查看应用详情

pm2 show my-api

5. 关闭/停止 Node.js 应用

停止单个应用

pm2 stop my-api
# 或通过 id 停止
pm2 stop 0

停止所有应用

pm2 stop all

删除应用(从 PM2 列表移除)

pm2 delete my-api
# 或
pm2 delete 0

6. 重启 Node.js 应用

普通重启

pm2 restart my-api

零停机重启(优雅重载)

适用于生产环境,避免请求中断:

pm2 reload my-api

重启所有应用

pm2 restart all

7. 日志管理

查看实时日志

pm2 logs my-api

查看最近 100 行日志

pm2 logs --lines 100

清空日志

pm2 flush

8. 监控应用性能

实时监控 CPU/内存

pm2 monit

会打开一个交互式面板,显示各进程的资源占用情况。

生成性能报告

pm2 report

9. 开机自启动

保存当前 PM2 应用列表

pm2 save

设置开机自启动

pm2 startup

然后按照提示执行生成的命令(如 systemd、init.d 等)。

取消开机自启动

pm2 unstartup

10. 高级用法

环境变量管理

pm2 start app.js --env production

并在项目根目录创建 ecosystem.config.js

module.exports = {apps: [{name: "my-api",script: "app.js",env: {NODE_ENV: "development",},env_production: {NODE_ENV: "production",}}]
};

然后启动:

pm2 start ecosystem.config.js --env production

最大内存限制

pm2 start app.js --max-memory-restart 512M

当内存超过 512MB 时自动重启。


11. 常见问题

Q1: PM2 启动后应用仍然退出?

可能是代码错误,查看日志:

pm2 logs my-api

Q2: 如何更新 PM2?

npm install -g pm2@latest
pm2 update

Q3: PM2 占用 CPU 过高怎么办?

检查是否有内存泄漏,或限制 CPU:

pm2 start app.js --max-memory-restart 1G

12. 总结

操作命令
启动应用pm2 start app.js --name my-api
停止应用pm2 stop my-api
重启应用pm2 restart my-api
零停机重载pm2 reload my-api
查看日志pm2 logs my-api
监控性能pm2 monit
开机自启pm2 save && pm2 startup

PM2 是 Node.js 开发者必备的工具,能极大提升应用稳定性,建议熟练掌握! 🚀

相关文章:

PM2 完全指南:Node.js 应用后台启动、关闭与重启详解

文章目录 **PM2 完全指南:Node.js 应用后台启动、关闭与重启详解****1. 什么是 PM2?****2. 安装 PM2****全局安装****验证安装** **3. 使用 PM2 启动 Node.js 应用****基本启动****指定应用名称****集群模式(多进程负载均衡)****监…...

LeetCode算法题(Go语言实现)_40

题目 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。 请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。 一、代码实现 import &…...

网关与路由器知识点

1.自治系统是由同构型的网关连接的因特网。自治系统内部的网关之间执行内部网关协议IGP,半天自治系统之间用外部网关协议EGP交换路由信息。 2.BGP4是一种动态路由发现协议,支持无类别域间路由CIDR,应用于不同ISP的网络之间,成为事…...

【Hadoop入门】Hadoop生态之Pig简介

1 什么是Pig? 在大数据分析领域,Apache Pig是一个不可忽视的重要工具。Pig是Apache Hadoop生态系统中的一个高级数据分析平台,它提供了一种称为Pig Latin的脚本语言,用于简化大规模数据集的并行处理。Pig的核心思想是将复杂的数据…...

TPS入门DAY04 服务器篇

1.创建委托并绑定回调,实现解耦 /* 创建会话完成 */ DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnCreateSessionCompleted, bool, bWasSuccessful); /* 开始会话完成 */ DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnStartSessionC…...

YOLO学习笔记 | YOLOv8环境搭建全流程指南(2025.4)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== YOLOv8环境搭建 一、环境准备与工具配置1. Conda虚拟环境搭建2. CUDA与…...

Java 设计模式:适配器模式详解

Java 设计模式:适配器模式详解 适配器模式(Adapter Pattern)是一种结构型设计模式,它通过将一个类的接口转换为客户端期望的另一个接口,使原本不兼容的类能够协同工作。适配器模式就像现实生活中的电源适配器&#xf…...

Java的基本语法(1)

一、运算符和表达式 举例说明什么是运算符,什么是表达式: int a 1; int b 2; int c a b; 在这个例子当中,是运算符,并且是算术运算符 ab是表达式,因为是运算符,所以ab是算术表达式 1.1算术运算符 …...

Spark-Core编程二

23) sortByKey import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Cww { def main(args: Array[String]): Unit { // 创建 SparkConf 对象,设置应用名称和运行模式 val conf new SparkConf().setAppName("SortBy…...

【antd + vue】Modal 对话框:修改弹窗标题样式、Modal.confirm自定义使用

一、标题样式 1、目标样式:修改弹窗标题样式 2、问题: 直接在对应css文件中修改样式不生效。 3、原因分析: 可能原因: 选择器权重不够,把在控制台找到的选择器直接复制下来,如果还不够就再加&#xff…...

JavaWeb 课堂笔记 —— 08 请求响应

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...

DataWorks智能体Agent发布!基于MCP实现数据开发与治理自动化运行

在传统的数据开发工作中,企业用户或者开发者常常需要进行繁琐的配置、复杂的代码撰写、反复的性能调优和大量重复性的操作,才能实现数据开发、数据集成和数据治理等工作,效率十分低下。 近日,阿里云大数据开发治理平台DataWorks基…...

VitePress 项目部署 cloudflare page 提示 Node 构建错误

提示的构建错误信息为&#xff1a; 09:35:29.838 Error: Exit with error code: 1 09:35:29.839 at ChildProcess.<anonymous> (/snapshot/dist/run-build.js) 09:35:29.839 at Object.onceWrapper (node:events:652:26) 09:35:29.839 at ChildProcess.emit …...

VUE的node包缓存很严重,问题及解决办法

以下是一些可能导致缓存问题的地方以及如何检查和解决这些问题的建议&#xff1a; 1. 检查依赖包的版本是否过时 某些依赖包可能有已知的缓存问题或性能问题。以下是需要特别注意的几个包&#xff1a; Vue CLI 相关&#xff1a; vue/cli-service 和 vue/cli-plugin-babel 的版…...

<C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现

在 .NET 开发里&#xff0c;有时一个接口会有多个实现类&#xff0c;此时就需要向依赖注入容器注册多个实现。下面会详细介绍不同场景下如何注册多个实现&#xff0c;以及怎样从容器中解析这些实现。 1. 注册多个实现 在 .NET 中&#xff0c;依赖注入容器可以通过不同方式注册…...

计算机视觉色彩空间全解析:RGB、HSV与Lab的实战对比

计算机视觉色彩空间全解析&#xff1a;RGB、HSV与Lab的实战对比 一、前言二、RGB 色彩空间​2.1 RGB 色彩空间原理​2.1.1 基本概念​2.1.2 颜色混合机制​ 2.2 RGB 在计算机视觉中的应用​2.2.1 图像读取与显示​2.2.2 颜色识别​2.2.3 RGB 色彩空间的局限性​ 三、HSV 色彩空…...

美食推荐小程序

用户端 1. **定位与筛选** - **精准定位**&#xff1a;根据用户所在位置&#xff0c;推荐周边美食餐厅。 - **筛选条件**&#xff1a;支持按菜系&#xff08;如川菜、粤菜&#xff09;、价格区间、评分、距离远近等筛选餐厅。 2. **餐厅展示** - **基本信息**&#xff1a;…...

使用django实现windows任务调度管理

在 Django 中实现 Windows 任务调度管理&#xff0c;你可以使用几种不同的方法。最常见的方法是使用 Django 自带的 celery 或者 django-background-tasks 库&#xff0c;或者使用 Windows 自带的任务计划程序。下面我会分别介绍这几种方法&#xff1a; 方法 1&#xff1a;使用…...

【Android】Android 打包 Release 崩溃问题全解析:Lint 错误、混淆类丢失及解决方法大全

摘要&#xff1a; 在 Android 项目的 Release 打包过程中&#xff0c;经常遇到诸如 Lint 校验失败、程序闪退、类找不到等问题。本文将详细分析 Android 打包时常见的崩溃原因&#xff0c;特别是如何应对 Lint 报错、混淆引发的类丢失&#xff08;NoClassDefFoundError&#xf…...

【Python 开源】你的 Windows 关机助手——PyQt5 版定时关机工具

&#x1f5a5;️ 你的 Windows 关机助手——PyQt5 版定时关机工具 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的…...

布局决定终局:基于开源AI大模型、AI智能名片与S2B2C商城小程序的战略反推思维

摘要&#xff1a;在商业竞争日益激烈的当下&#xff0c;布局与终局预判成为企业成功的关键要素。本文探讨了布局与终局预判的智慧性&#xff0c;强调其虽无法做到百分之百准确&#xff0c;但能显著提升思考能力。终局思维作为重要战略工具&#xff0c;并非一步到位的战略部署&a…...

vue3循环表单【以el-form组件为例】,如何校验所有表单,所有表单校验通过后提交

1.循环时&#xff0c;在组件标签上使用ref绑定组件实例 3.如何校验所有表单都通过后方可提交&#xff1f;利用promise.all()判断 代码如下&#xff1a; <template><div><!-- 循环渲染表单 --><el-formv-for"(formItem, index) in formList":…...

量子代理签名:量子时代的数字授权革命

1. 量子代理签名的定义与核心原理 量子代理签名&#xff08;Quantum Proxy Signature, QPS&#xff09;是经典代理签名在量子信息领域的延伸&#xff0c;允许原始签名者&#xff08;Original Signer&#xff09;授权给代理签名者&#xff08;Proxy Signer&#xff09;代为签署文…...

HTTPS代理的实际优势,如何选择HTTPS代理服务?

在数字化时代&#xff0c;网络请求的安全性和效率成为企业和个人用户关注的焦点。HTTPS代理作为一种强大的工具&#xff0c;不仅在数据安全方面表现出色&#xff0c;还在安全访问、突破地域限制以及支持复杂任务等方面展现出多样化的优势。本文将深入探讨HTTPS代理的实际优势&a…...

Java 中常见的数据结构

目录 1. List (列表) 2&#xff09;ArrayList 2&#xff09;LinkedList 2. Set (集合) 1&#xff09;HashSet 2&#xff09;TreeSet 3. Map (映射) 1&#xff09;HashMap 2&#xff09;TreeMap 4. Queue (队列) 1&#xff09;LinkedList (也实现了Queue接口) 2&…...

Transformer多卡训练初始化分布式环境:(backend=‘nccl‘)

Transformer多卡训练初始化分布式环境:(backend=‘nccl’) dist.init_process_group(backend=nccl)在多卡环境下初始化分布式训练环境,并为每个进程分配对应的 GPU 设备。下面为你逐行解释代码的含义: 1. 初始化分布式进程组 try:dist.init_process_group(backend=nccl) e…...

云曦月末断网考核复现

Web 先看一个BUUCTF中的文件一个上传题 [BUUCTF] 2020新生赛 Upload 打开后是一个文件上传页面 随便上传一个txt一句话木马后出现js弹窗&#xff0c;提示只能上传图片格式文件 说明有前端验证。我的做法是把一句话改为.jpg格式&#xff0c; 然后上传 访问发现虽然上传成功了…...

SQL Server AlwaysOn (SQL 查询数据详解及监控用途)

修正后的完整查询 SELECT ar.replica_server_name AS [副本名称],ar.availability_mode_desc AS [同步模式],DB_NAME(dbr.database_id) AS [数据库名称],dbr.database_state_desc AS [数据库状态],dbr.synchronization_state_desc AS [同步状态],dbr.synchronization_health_d…...

使用 Q - learning 算法解决迷宫路径规划问题

整体功能概述 这段 Python 代码实现了一个使用 Q - learning 算法解决迷宫路径规划问题的程序。智能体在给定的迷宫环境中学习如何找到从起点到终点的最优路径&#xff0c;以获得最大奖励。 模块导入 python import numpy as np import randomnumpy&#xff1a;用于处理数组…...

SqlYog无限试用方法

1、WinR ,输入 &#xff1a;regedit 回车 2、进入注册表&#xff0c;在 \HEYK_CURRENT_USER\Software\{*********-D8CE-4637-9BC7-93E************}下的【InD100】保存着SQLyog的使用天数 3、在【InD】上右键&#xff0c;点击删除该项&#xff0c;在重启SQLyog后注册表中会重…...

14 nginx 的 dns 缓存的流程

前言 这个是 2020年11月 记录的这个关于 nginx 的 dns 缓存的问题 docker 环境下面 前端A连到后端B 前端B连到后端A 最近从草稿箱发布这个问题的时候, 重新看了一下 发现该问题的记录中仅仅是 定位到了 nginx 这边的 dns 缓存的问题, 但是 并没有到细节, 没有到 具体的 n种…...

Spring Cloud Gateway 具体的实现案例

文章目录 前言✅ 1. **创建 Spring Boot 项目**Maven 依赖&#xff1a;Gradle 依赖&#xff1a; ✅ 2. **配置 application.yml 路由和过滤器**解释&#xff1a; ✅ 3. **创建自定义过滤器**3.1 **前置过滤器&#xff08;Pre Filter&#xff09;**3.2 **后置过滤器&#xff08;…...

css易混淆的知识点

子选择器 (>) vs 后代选择器 (空格) 子选择器 (>) 只匹配直接子元素。后代选择器 (空格) 匹配所有后代元素&#xff08;无论嵌套多深&#xff09;。 绝对定位vs相对定位 布局&#xff1a; justify-content 的作用 控制子元素在主轴上的分布方式。常见值包括 flex-start、…...

OpenCV 图形API(27)图像滤波-----膨胀函数dilate()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用特定的结构元素膨胀图像。 cv::gapi::dilate 是 OpenCV G-API 模块中的一个函数&#xff0c;用于对图像执行膨胀操作。膨胀是一种形态学操作…...

13. Git 远程仓库配置

基本步骤 以Gitee为例子&#xff0c;GitHub的步骤也基本一致 1.注册/登录 Gitee 账号 https://gitee.com/ 2.新建仓库 3.配置仓库 根据自己的喜好&#xff0c;配置即可。 4.生成SSH密钥 ssh-keygen -t ed25519 -C "你的邮箱example.com"-t ed25519&#xff1a;使…...

语音识别——根据声波能量、VAD 和 频谱分析实时输出文字

ASR(语音识别)是将音频信息转化为文字的技术。在实时语音识别中,一个关键问题是:如何决定将采集的音频数据输入大模型的最佳时机?固定时间间隔显然不够灵活,太短可能导致频繁调用模型,太长则会延迟文字输出。有没有更智能的方式?答案是肯定的。 一种常见的解决方案是使…...

netty中的ChannelHandler详解

Netty中的ChannelHandler是网络事件和数据处理的核心执行单元,负责处理I/O事件(如连接建立、数据读写)以及业务逻辑的实现。它通过ChannelPipeline形成责任链,实现事件的动态编排与传播。以下从功能分类、核心机制到实际应用进行详细解析: 1. ChannelHandler的核心功能与分…...

介绍一下freertos

FreeRTOS 是一款‌开源的实时操作系统&#xff08;RTOS&#xff09;‌&#xff0c;专为嵌入式系统和微控制器设计&#xff0c;以‌轻量级、高可靠性、低延迟‌著称。它广泛应用于物联网&#xff08;IoT&#xff09;、工业自动化、消费电子等领域。以下是详细介绍&#xff1a; ‌…...

使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录

使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录 功能概述 克魔助手无需越狱即可访问iOS上各个应用程序的历史记录&#xff0c;包括&#xff1a; 最近几个月的app的详细启动时间记录&#xff0c;结束时间&#xff0c;app使用的硬件组件应用的耗能具体情况&#xff…...

mysql和mongodb

1.mongodb 写入更快&#xff0c;数据结构频繁更新&#xff0c;这个不方便工程管理.另外会序列化成json格式&#xff0c;比如为json的成员建立索引&#xff0c;这都是比较损耗性能。字段太多&#xff0c;moondbjson名太多&#xff0c;导致数据冗余, moongodb频繁按字段更新&…...

介绍一下 ChibiOS

ChibiOS 是一款专为嵌入式系统设计的‌开源实时操作系统&#xff08;RTOS&#xff09;‌&#xff0c;以其‌硬实时性能、轻量化架构和高可移植性‌著称。它广泛应用于无人机、机器人、工业控制等领域&#xff0c;尤其在无人机飞控&#xff08;如 ArduPilot 的某些硬件平台&…...

《Vue Router实战教程》3.动态路由匹配

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 动态路由匹配 带参数的动态路由匹配 很多时候&#xff0c;我们需要将给定匹配模式的路由映射到同一个组件。例如&#xff0c;我们可能有一个 User 组件&#xff0c;它应该对所有用户进行渲染&#xff0c;…...

NLP高频面试题(四十)——什么是 BitFit?

BitFit(Bias-term Fine-tuning)是一种参数高效的微调方法,专注于在预训练模型中仅调整偏置项(bias term),而将其他参数保持不变。这种方法在自然语言处理领域,尤其是在中小规模数据集上,展现出了与全量微调相媲美的性能,同时显著减少了计算资源的消耗。 什么是 BitFi…...

react+Tesseract.js实现前端拍照获取/选择文件等文字识别OCR

需求背景 在开发过程中可能会存在用户上传一张图片后下方需要自己识别出来文字数字等信息&#xff0c;有的时候会通过后端来识别后返回&#xff0c;但是也会存在纯前端去识别的情况&#xff0c;这个时候就需要使用到Tesseract.js这个库了 附Tesseract.js官方&#xff08;htt…...

go:实现最简单区块链

1.新建文件夹命名为blockchain,在此文件夹下分别创建两个文件一个为block.go另一个为chain.go如下图所示: 2.写入代码: block.go package blockchainimport ("bytes""crypto/sha256""encoding/gob""log""strconv""ti…...

使用Python写入JSON、XML和YAML数据到Excel文件

在当今数据驱动的技术生态中&#xff0c;JSON、XML和YAML作为主流结构化数据格式&#xff0c;因其层次化表达能力和跨平台兼容性&#xff0c;已成为系统间数据交换的通用载体。然而&#xff0c;当需要将这类半结构化数据转化为具备直观可视化、动态计算和协作共享特性的载体时&…...

如何使用通义灵码玩转Linux - AI编程助手提升效率

一、引言 Linux 作为服务器常用的操作系统&#xff0c;其命令行界面、繁多的命令以及需要进行的配置等&#xff0c;都给初学者带来了不小的挑战。为了帮助初学者快速上手 Linux&#xff0c;本文将介绍如何使用通义灵码这一智能编码助手&#xff0c;提升在 Linux 环境下的开发效…...

主服务器和子服务器之间通过NFS实现文件夹共享

背景&#xff1a; 子服务器想做一个备份服务器 但是之前有很多文件是上传到本地的&#xff0c;于是服务要从本地读取文件 但是在不在同一台服务器中&#xff0c;读取就会有问题&#xff0c;想 实现在两者之间创建一个共享文件夹 一 NFS挂载步骤&#xff1a; 在主服务器&#…...

前端知识点---防抖(javascript)

什么是防抖 ? 防抖:单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次 举例: 百度输入框, 输入一个字母下面就会有提示 输入第二个字母下面的提示就会变 而别的浏览器只有在你输入结束之后才出现提示, 这就是做了防抖处理 使用场景: 搜索框搜索输入。只需用户…...

django rest framework相关面试题

django rest framework相关面试题 1.什么是restful规范 link link link link...