【求教】Nodejs如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500

【求教】Nodejs如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500

这个是在微博上看到【大城小胖】发的,看看各位cnoder有米有好方法

如何永久提升 node 的 栈大小, 不要每次都手动添加 --stack-size=65500

5 回复

要永久性地增加 Node.js 的栈大小而不必每次都手动添加 --stack-size 参数,可以通过修改 Node.js 的启动脚本或者使用环境变量来实现。下面是两种常见的方法:

方法一:修改启动脚本

  1. 创建或修改启动脚本: 如果你有一个用于启动 Node.js 应用的 shell 脚本,可以在脚本中设置栈大小。

    #!/bin/bash
    node --stack-size=65536 your-app.js
    
  2. 将脚本设置为默认启动方式: 确保每次启动 Node.js 应用时都使用这个脚本。例如,如果你的应用是通过系统服务(如 systemd)启动的,可以修改相应的服务配置文件。

    [Service]
    ExecStart=/path/to/your/startup-script.sh
    

方法二:使用环境变量

另一种方法是使用环境变量来设置栈大小。这种方法需要一些额外的步骤,因为它涉及到修改 Node.js 的启动方式。

  1. 创建一个自定义的 Node.js 可执行文件: 创建一个新的可执行文件(例如 node-stack.sh),并在其中设置栈大小。

    #!/bin/bash
    exec /usr/local/bin/node --stack-size=65536 "$@"
    
  2. 将新可执行文件链接到系统路径: 将新创建的可执行文件链接到 /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”

要在 Node.js 中永久提升栈大小,可以通过修改启动脚本或设置环境变量来实现。这样可以避免每次运行 Node.js 应用时都手动指定 --stack-size 参数。

方法1:修改启动脚本

你可以创建一个启动脚本来自动包含 --stack-size 参数。例如:

  1. 创建一个新的启动脚本文件,比如 start-node.sh
  2. 在文件中写入以下内容:
#!/bin/bash
node --stack-size=65536 "$@"
  1. 赋予该脚本执行权限:
chmod +x start-node.sh
  1. 使用该脚本启动你的 Node.js 应用:
./start-node.sh your-app.js

方法2:设置环境变量

另一种方法是通过设置环境变量来配置 Node.js 的默认行为。这种方法不是直接修改 Node.js 的栈大小,但可以确保每次运行 Node.js 时都包含特定参数。

  1. 修改 .bashrc.zshrc 文件(取决于你使用的 shell):
echo 'export NODE_OPTIONS=--stack-size=65536' >> ~/.bashrc
  1. 重新加载配置文件:
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 的栈大小,无需每次都手动指定参数。

回到顶部