一、介绍
Node --max-old-space-size 是 Node.js 中的一个配置选项,用于限制进程使用的内存大小。它可以帮助防止内存泄漏和其他与内存有关的问题,从而提高应用程序的稳定性和性能。当进程使用的内存超过配置的限制时,Node.js 会自动释放内存,以避免内存不足的错误。
二、优劣势
-
优势:
- 提高应用程序的稳定性和性能;
- 防止内存泄漏和其他与内存有关的问题;
- 可以根据应用程序的需求进行灵活配置。
-
劣势:
- 可能会降低应用程序的性能,因为它限制了进程使用的内存大小;
- 配置不当可能会导致应用程序崩溃或出现其他问题。
三、PM2 配置
PM2 是一个用于管理 Node.js 应用程序的工具,它可以帮助您在生产环境中运行和管理应用程序。要使用 PM2 配置 Node --max-old-space-size,您可以按照以下步骤进行操作:
-
安装 PM2:使用以下命令安装 PM2:
npm install pm2 -g
-
创建 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,
},
],
}
- 启动 PM2:使用以下命令启动 PM2:
arduino
// 举例
pm2 startOrRestart pm2.config.js --env feature
四、Node 如何配置
要在 Node.js 应用程序中配置 Node --max-old-space-size,您可以按照以下步骤进行操作:
- 在应用程序代码中使用
--max-old-space-size
参数:在您的应用程序代码中,使用以下命令来启动 Node.js 进程:
arduino
node --max-old-space-size=1024 app.js
- 在 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 配置方法的具体细节可能会因版本和环境而异。在进行任何配置之前,请确保您已经了解了相关文档和指南。