【求教】Nodejs如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500
【求教】Nodejs如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500
这个是在微博上看到【大城小胖】发的,看看各位cnoder有米有好方法
如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500
要永久性地增加 Node.js 的栈大小而不必每次都手动添加 --stack-size
参数,可以通过修改 Node.js 的启动脚本或者使用环境变量来实现。下面是两种常见的方法:
方法一:修改启动脚本
-
创建或修改启动脚本: 如果你有一个用于启动 Node.js 应用的 shell 脚本,可以在脚本中设置栈大小。
#!/bin/bash node --stack-size=65536 your-app.js
-
将脚本设置为默认启动方式: 确保每次启动 Node.js 应用时都使用这个脚本。例如,如果你的应用是通过系统服务(如 systemd)启动的,可以修改相应的服务配置文件。
[Service] ExecStart=/path/to/your/startup-script.sh
方法二:使用环境变量
另一种方法是使用环境变量来设置栈大小。这种方法需要一些额外的步骤,因为它涉及到修改 Node.js 的启动方式。
-
创建一个自定义的 Node.js 可执行文件: 创建一个新的可执行文件(例如
node-stack.sh
),并在其中设置栈大小。#!/bin/bash exec /usr/local/bin/node --stack-size=65536 "$@"
-
将新可执行文件链接到系统路径: 将新创建的可执行文件链接到
/usr/local/bin
或其他系统路径中,以便可以直接调用。sudo ln -s /path/to/node-stack.sh /usr/local/bin/node
这样,每次调用 node
命令时都会自动使用你设置的栈大小。
示例代码
假设你选择使用修改启动脚本的方法,你可以创建一个名为 start-node.sh
的脚本:
#!/bin/bash
node --stack-size=65536 your-app.js
然后确保每次启动应用时都运行这个脚本。
总结
以上两种方法都可以帮助你在不每次都手动添加 --stack-size
参数的情况下永久性地增加 Node.js 的栈大小。选择哪种方法取决于你的具体需求和应用场景。如果是在开发环境中,使用修改启动脚本的方法可能更方便;如果是生产环境中,可能需要考虑使用环境变量的方法以确保一致性和可维护性。
这就是要修改默认值,除了重新编译一个node,想不出别的办法。
Node.js v0.10.33定义的stack_size:
DEFINE_int(stack_size, kPointerSize * 123, “default size of stack region v8 is allowed to use (in kBytes)”)
所以默认值是984KB,大约是1MB。
传参数的方法有什么问题?
shell alias可以吗? alias node = “node --stack-size=65500”
用pm2,设置自定义node_args
https://github.com/Unitech/PM2/blob/development/ADVANCED_README.md#a10
要在 Node.js 中永久提升栈大小,可以通过修改启动脚本或设置环境变量来实现。这样可以避免每次运行 Node.js 应用时都手动指定 --stack-size
参数。
方法1:修改启动脚本
你可以创建一个启动脚本来自动包含 --stack-size
参数。例如:
- 创建一个新的启动脚本文件,比如
start-node.sh
。 - 在文件中写入以下内容:
#!/bin/bash
node --stack-size=65536 "$@"
- 赋予该脚本执行权限:
chmod +x start-node.sh
- 使用该脚本启动你的 Node.js 应用:
./start-node.sh your-app.js
方法2:设置环境变量
另一种方法是通过设置环境变量来配置 Node.js 的默认行为。这种方法不是直接修改 Node.js 的栈大小,但可以确保每次运行 Node.js 时都包含特定参数。
- 修改
.bashrc
或.zshrc
文件(取决于你使用的 shell):
echo 'export NODE_OPTIONS=--stack-size=65536' >> ~/.bashrc
- 重新加载配置文件:
source ~/.bashrc
从现在开始,每次运行 Node.js 时都会自动使用 --stack-size=65536
参数。
示例代码
如果你希望在应用程序内部动态调整栈大小,可以考虑使用 worker_threads
模块来创建线程,并在每个线程中设置不同的栈大小。但这需要对应用架构进行较大改动。
const { Worker } = require('worker_threads');
// 创建一个具有自定义栈大小的工作线程
const worker = new Worker(__filename, {
workerData: { message: 'Hello from worker!' },
execArgv: ['--stack-size=65536']
});
worker.on('message', (msg) => {
console.log(msg);
});
请注意,这种方法仅适用于 worker_threads
,并不直接改变主线程的栈大小。
总结:通过创建启动脚本或设置环境变量,可以永久性地提升 Node.js 的栈大小,无需每次都手动指定参数。