You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js 18中如何通过ES Module设置cluster.schedulingPolicy?

在ES模块中设置Node.js cluster的schedulingPolicy

问题背景

我在集群模式下运行loadtest模块以利用多核资源,发现使用cluster.SCHED_NONE作为调度策略比默认的轮询策略cluster.SCHED_RR运行效率更高。通过外部环境变量设置可以正常生效:

$ NODE_CLUSTER_SCHED_POLICY='none' node bin/testserver.js

但尝试在ES模块(import语法)中直接设置时遇到报错:

import * as cluster from 'cluster'
cluster.schedulingPolicy = cluster.SCHED_NONE

报错信息:

TypeError: Cannot assign to read only property 'schedulingPolicy' of object '[object Module]'

单独导入schedulingPolicy也无效;而在代码中先导入cluster再设置process.env['NODE_CLUSTER_SCHED_POLICY'],子进程依然使用默认的cluster.SCHED_RR策略。

解决方案

在ES模块中,cluster模块的导出属性是只读的,无法直接赋值修改。正确的做法是在导入cluster模块之前设置环境变量——因为cluster模块在加载时会读取该环境变量并初始化调度策略:

// 先设置环境变量
process.env.NODE_CLUSTER_SCHED_POLICY = 'none'
// 再导入cluster模块
import * as cluster from 'cluster'

// 后续集群代码逻辑
if (cluster.isPrimary) {
  // 主进程逻辑
} else {
  // 子进程逻辑
}

也可以直接使用cluster.SCHED_NONE的对应值'none'来设置,效果完全一致。这样配置后,cluster模块加载时会应用指定的调度策略,子进程也会遵循该配置运行。

内容的提问来源于stack exchange,提问作者alexfernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:28:26