我尝试在Azure WebApps服务中使用群集,但我收到了错误
Error: write ENOTSUP
我在源代码下面附加我的源代码是由web.config文件执行的。
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const cpus = os.cpus().length;
console.log(`Forking for ${cpus} CPUs`);
for (let i = 0; i < cpus; i++)
cluster.fork();
cluster.on('exit', (worker, code, signal) => {
if (code !== '0' && !worker.exitedAfterDisconnect) {
console.log(`Worker ${worker.id} crashed. Starting a new worker...`);
cluster.fork();
}
});
process.on('SIGUSR2', () => {
const workers = Object.values(cluster.workers);
const restartWorker = (workerIndex) => {
const worker = workers[workerIndex];
if (!worker)
return;
worker.on('exit', () => {
if (!worker.exitedAfterDisconnect)
return;
console.log(`Exited process ${worker.process.pid}`);
cluster.fork().on('listening', () => {
restartWorker(workerIndex + 1);
});
});
worker.disconnect();
};
restartWorker(0);
});
} else {
require('./bin/www');
}
Azure是否支持WebApps中的群集? 如果不是有什么选择?
谢谢,迈克尔。
答案 0 :(得分:1)
Azure Web Apps不支持群集,因为它不支持使用命名管道。在GitHub上查看此主题:https://github.com/tjanczuk/iisnode/issues/419
您的选择是使用 Azure云服务或 Azure虚拟机。
答案 1 :(得分:0)
我遇到了类似的问题,在研究过程中我发现如果你想在你的节点应用程序中使用群集,你就不能使用本机节点集群。但是,如果您的计算机有多个CPU核心并且您想要进行平衡,则可以在web.config文件中添加此行。
<iisnode watchedFiles="web.config;*.js" devErrorsEnabled="true" nodeProcessCountPerApplication="0" />
nodeProcessCountPerApplication。
此设置控制启动的节点进程数 每个IIS应用程序。默认值为1.您可以启动任意数量 node.exes作为您的VM vCPU计数,方法是将其设置为0.建议使用 对于大多数应用程序,值为0,因此您可以使用所有vCPU 你的机器。 Node.exe是单线程的,因此一个node.exe占用了一个 最多1个vCPU。从节点中获得最大性能 应用程序,您想要使用所有vCPU
阅读此guide
设置此值并重新部署您的应用后(需要一些时间来刷新),您可以检查您的过程资源管理器&#34;转到你的App Service - &gt;监控部分 - &gt;进程资源管理器。在这里,您可以找到App Service使用的当前核心数。