likes
comments
collection
share

Node 内存配置说明文档

作者站长头像
站长
· 阅读数 4

一、介绍

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
  1. 创建 PM2 配置文件:在您的项目根目录下创建一个名为 pm2.config.js 的文件,并在其中添加以下内容:

Nuxt:

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


module.exports = {
  nodeMaxOldSpaceSize,
}
// 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:
// 举例
pm2 startOrRestart pm2.config.js --env feature

四、Node 如何配置

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

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

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

npm run start

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

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