Node 内存配置说明文档

一、介绍

Node --max-old-space-size 是 Node.js 中的一个配置选项,用于限制进程使用的内存大小。它可以帮助防止内存泄漏和其他与内存有关的问题,从而提高应用程序的稳定性和性能。当进程使用的内存超过配置的限制时,Node.js 会自动释放内存,以避免内存不足的错误。

二、优劣势

  • 优势:

    • 提高应用程序的稳定性和性能;
    • 防止内存泄漏和其他与内存有关的问题;
    • 可以根据应用程序的需求进行灵活配置。
  • 劣势:

    • 可能会降低应用程序的性能,因为它限制了进程使用的内存大小;
    • 配置不当可能会导致应用程序崩溃或出现其他问题。

三、PM2 配置

PM2 是一个用于管理 Node.js 应用程序的工具,它可以帮助您在生产环境中运行和管理应用程序。要使用 PM2 配置 Node --max-old-space-size,您可以按照以下步骤进行操作:

  1. 安装 PM2:使用以下命令安装 PM2:

    npm install pm2 -g

  2. 创建 PM2 配置文件:在您的项目根目录下创建一个名为 pm2.config.js 的文件,并在其中添加以下内容:

Nuxt:

arduino 复制代码
// lib/env.js
const nodeMaxOldSpaceSize = process?.env?.NODE_MAX_OLD_SPACE_SIZE; // 容器内置 Node 分配内存变量、运维镜像注入的


module.exports = {
  nodeMaxOldSpaceSize,
}
php 复制代码
// pm2.config.js
/* eslint-disable camelcase */
const minimist = require('minimist')
const pkg = require('./package.json')
const { envs, pm2Env, mathSubStract, nodeMaxOldSpaceSize } = require('./lib/env')
const appName = pkg.name
const args = minimist(process.argv.slice(2))
const env = args.env || 'dev'
const isProd = envs.includes(env)
const isRealProd = ['prod'].includes(env)
const logPath = isProd ? '/data0/opt/logs/' : './logs/'
const maxOldSpaceSize = nodeMaxOldSpaceSize || (isRealProd ? 4096 : 1024) // 老生代
const maxMemoryRestart = mathSubStract(maxOldSpaceSize, 1024) + 'G' // 重启阈值

module.exports = {
  /**
   * 镜像 POD 内存 6G
   * Node 分配 4G
   */
  apps: [
    {
      name: appName, // 项目应用名称
      cwd: './', // 当前工作路径
      script: './node_modules/nuxt/bin/nuxt.js', // 实际启动脚本
      args: 'start', // 参数
      autorestart: true, // 发生异常的情况下自动重启
      error_file: logPath + 'hs-fe-err.log', // 错误日志
      out_file: logPath + 'hs-fe-out.log', // 正常运行日志
      log_date_format: 'YYYY-MM-DD HH:mm:ss:SSS', // 日志输出格式
      exec_mode: 'cluster', // 应用启动模式,支持fork和cluster模式
      merge_logs: true, // 在 cluster 模式下,每个cluster都有它自己的日志,可以使用merge选项来收集所有相关日志到一个文件里去
      min_uptime: 100, // 应用运行少于时间被认为是异常启动
      instances: 4, // 开启4个实例,仅在cluster模式有效,用于负载均衡
      max_memory_restart: maxMemoryRestart, // 如果应用程序超过指定的内存数,那么 PM2 将重新启动应用程序。
      /**
       * require('v8').getHeapStatistics() 中 heap_size_limit 可以表示 --max-old-space-size
       */
      node_args: `--max-old-space-size=${maxOldSpaceSize}`, // 传递给 nodejs 的CLI参数
      ...pm2Env,
    },
  ],
}
  1. 启动 PM2:使用以下命令启动 PM2:
arduino 复制代码
// 举例
pm2 startOrRestart pm2.config.js --env feature

四、Node 如何配置

要在 Node.js 应用程序中配置 Node --max-old-space-size,您可以按照以下步骤进行操作:

  1. 在应用程序代码中使用 --max-old-space-size 参数:在您的应用程序代码中,使用以下命令来启动 Node.js 进程:
arduino 复制代码
node --max-old-space-size=1024 app.js
  1. 在 package.json 文件中使用 scripts 字段:在您的项目根目录下的 package.json 文件中,添加以下内容:
json 复制代码
"scripts": {
  "start": "node --max-old-space-size=1024 app.js"
}

然后,您可以使用以下命令来启动应用程序:

arduino 复制代码
npm run start

这将启动一个名为 app.js 的应用程序,并将 max_old_space-size 设置为 1024。您可以根据需要修改 max_old_space_size 的值。

请注意,PM2 和 Node.js 配置方法的具体细节可能会因版本和环境而异。在进行任何配置之前,请确保您已经了解了相关文档和指南。

相关推荐
折哥的程序人生 · 物流技术专研12 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
问心无愧051312 小时前
ctf show web入门160 161
前端·笔记
李小白6613 小时前
第四天-WEB服务器基本原理,IIS服务
运维·服务器·前端
程序员二叉13 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
humcomm13 小时前
AI编程时代新前端职位
前端·ai编程
好家伙VCC13 小时前
Web Components主题热切换方案揭秘
java·前端
甲维斯14 小时前
Kimi版超级玛丽效果“惊人”,配额不足5厘米!
前端·人工智能
hboot14 小时前
AI工程师第一课 - Python
前端·后端·python
凉菜凉凉14 小时前
AI时代,被抛弃的前端
前端·ai
console.log('npc')14 小时前
AI前端工程与生成式UI学习路线
前端·人工智能·ui