Node 内存配置说明文档
一、介绍
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:
1// lib/env.js
2const nodeMaxOldSpaceSize = process?.env?.NODE_MAX_OLD_SPACE_SIZE; // 容器内置 Node 分配内存变量、运维镜像注入的
3
4module.exports = {
5 nodeMaxOldSpaceSize,
6}
7
1// pm2.config.js
2/* eslint-disable camelcase */
3const minimist = require('minimist')
4const pkg = require('./package.json')
5const { envs, pm2Env, mathSubStract, nodeMaxOldSpaceSize } = require('./lib/env')
6const appName = pkg.name
7const args = minimist(process.argv.slice(2))
8const env = args.env || 'dev'
9const isProd = envs.includes(env)
10const isRealProd = ['prod'].includes(env)
11const logPath = isProd ? '/data0/opt/logs/' : './logs/'
12const maxOldSpaceSize = nodeMaxOldSpaceSize || (isRealProd ? 4096 : 1024) // 老生代
13const maxMemoryRestart = mathSubStract(maxOldSpaceSize, 1024) + 'G' // 重启阈值
14
15module.exports = {
16 /**
17 * 镜像 POD 内存 6G
18 * Node 分配 4G
19 */
20 apps: [
21 {
22 name: appName, // 项目应用名称
23 cwd: './', // 当前工作路径
24 script: './node_modules/nuxt/bin/nuxt.js', // 实际启动脚本
25 args: 'start', // 参数
26 autorestart: true, // 发生异常的情况下自动重启
27 error_file: logPath + 'hs-fe-err.log', // 错误日志
28 out_file: logPath + 'hs-fe-out.log', // 正常运行日志
29 log_date_format: 'YYYY-MM-DD HH:mm:ss:SSS', // 日志输出格式
30 exec_mode: 'cluster', // 应用启动模式,支持fork和cluster模式
31 merge_logs: true, // 在 cluster 模式下,每个cluster都有它自己的日志,可以使用merge选项来收集所有相关日志到一个文件里去
32 min_uptime: 100, // 应用运行少于时间被认为是异常启动
33 instances: 4, // 开启4个实例,仅在cluster模式有效,用于负载均衡
34 max_memory_restart: maxMemoryRestart, // 如果应用程序超过指定的内存数,那么 PM2 将重新启动应用程序。
35 /**
36 * require('v8').getHeapStatistics() 中 heap_size_limit 可以表示 --max-old-space-size
37 */
38 node_args: `--max-old-space-size=${maxOldSpaceSize}`, // 传递给 nodejs 的CLI参数
39 ...pm2Env,
40 },
41 ],
42}
43
- 启动 PM2:使用以下命令启动 PM2:
1// 举例
2pm2 startOrRestart pm2.config.js --env feature
3
四、Node 如何配置
要在 Node.js 应用程序中配置 Node --max-old-space-size,您可以按照以下步骤进行操作:
- 在应用程序代码中使用
--max-old-space-size
参数:在您的应用程序代码中,使用以下命令来启动 Node.js 进程:
1node --max-old-space-size=1024 app.js
2
- 在 package.json 文件中使用
scripts
字段:在您的项目根目录下的package.json
文件中,添加以下内容:
1"scripts": {
2 "start": "node --max-old-space-size=1024 app.js"
3}
4
然后,您可以使用以下命令来启动应用程序:
1npm run start
2
这将启动一个名为 app.js
的应用程序,并将 max_old_space-size
设置为 1024。您可以根据需要修改 max_old_space_size
的值。
请注意,PM2 和 Node.js 配置方法的具体细节可能会因版本和环境而异。在进行任何配置之前,请确保您已经了解了相关文档和指南。
相关笔记