-
feat(core): lock graph creation when running in another process (#29408)
发布于
2025-01-28 14:46:52 +00:00 Current Behavior
Running Nx in multiple processes at the same time with the daemon
disabled can cripple a system due to excess memory usage when creating
the graph. This is due to plugin workers being started per-parent
process when there is no daemon. This change enables a file lock to
prevent the simultaneous processing, and read from the cache when the
first run completes.Currently, running
nx show projects30 times in parallel looks
something like this:30 processes exited within 37535ms
Expected Behavior
30 processes exited within 6435ms
Test Script
//@ts-check const { spawn } = require('child_process'); let alive = new Set(); let start = Date.now(); let iterations = 30; for (let i = 0; i < iterations; i++) { const cp = spawn('npx nx show projects', [], { shell: true, env: { ...process.env, NX_DAEMON: 'false', NX_VERBOSE_LOGGING: 'true', }, }); alive.add(i); // cp.stdout.on('data', (data) => { // console.log(`stdout [${i}]: ${data}`); // }); cp.stderr.on('data', (data) => { console.error(`stderr [${i}]: ${data}`); }); cp.on('exit', (code) => { console.log(`child process ${i} exited with code ${code}`); alive.delete(i); }); } const i = setInterval(() => { if (alive.size > 0) { } else { clearInterval(i); console.log( `${iterations} processes exited within ${Date.now() - start}ms` ); } }, 1);下载附件