Nx
Enterprise
Nx
Overview
Sign in / Sign up
Open main menu
Nx
GitHub
Select a tab
Overview
Runs
Analytics
Nx
GitHub
Overview
Runs
Analytics
Loading workspace stats
Loading workspace insights...
Statistics interval
7 days
30 days
Latest CI Pipeline Executions
Filter range
Filter
Filter exact branch match
Exact
Select status
Succeeded
20.5.0-beta.0
5721ea3c feat(core): lock graph creation when running in another process (#29408) ## 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 projects` 30 times in parallel looks something like this: 30 processes exited within 37535ms ## Expected Behavior 30 processes exited within 6435ms ## Test Script ```js //@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); ```
1 month ago
by FrozenPandaz