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 配置方法的具体细节可能会因版本和环境而异。在进行任何配置之前,请确保您已经了解了相关文档和指南。

相关推荐
葬送的代码人生2 分钟前
别再「Ctrl+C/V」了!Git 开发必备技能,10 分钟告别单机码农
前端·github·代码规范
xuankuxiaoyao3 分钟前
vue.js 设计与开发 ---路由
前端·javascript·vue.js
ZC跨境爬虫6 分钟前
跟着 MDN 学CSS day_6:(伪类和伪元素详解)
前端·javascript·css·数据库·ui·html
idcu7 分钟前
Lyt.js + Vite 快速开发指南
前端·typescript
暗不需求7 分钟前
玩转 React Hooks:从基础到实战,逐行解析带你彻底掌握
前端·react.js·面试
一颗小青松9 分钟前
css 文字区域根据图片形状显示,根据文字设置背景图
前端·css
阿黎梨梨10 分钟前
跟 Git 打交道的正确姿势
前端
idcu10 分钟前
深入 Lyt.js 路由系统:L6 生态系统层的核心
前端·typescript
idcu11 分钟前
用 Lyt.js 构建 Todo 应用:完整教程
前端·typescript
七夜zippoe11 分钟前
DolphinDB时间序列引擎:实时聚合计算
服务器·前端·时间序列·dolphindb·实时聚合