diff --git a/src/services/browser.ts b/src/services/browser.ts index 01a010e..f416221 100644 --- a/src/services/browser.ts +++ b/src/services/browser.ts @@ -56,9 +56,11 @@ function pickInstance(): BrowserInstance | null { } export async function acquirePage(): Promise<{ page: Page; instance: BrowserInstance }> { + const anyRestarting = instances.some(i => i.restarting); for (const inst of instances) { - if (!inst.restarting && (inst.jobCount >= RESTART_AFTER || Date.now() - inst.lastRestartTime >= RESTART_AFTER_MS)) { + if (!inst.restarting && !anyRestarting && (inst.jobCount >= RESTART_AFTER || Date.now() - inst.lastRestartTime >= RESTART_AFTER_MS)) { scheduleRestart(inst); + break; // only restart one at a time } } @@ -130,7 +132,8 @@ export async function initBrowser(): Promise { args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--disable-dev-shm-usage"], }); const pages = await createPages(browser, PAGES_PER_BROWSER); - instances.push({ browser, availablePages: pages, jobCount: 0, lastRestartTime: Date.now(), restarting: false, id: i }); + const staggerMs = i * (RESTART_AFTER_MS / BROWSER_COUNT); + instances.push({ browser, availablePages: pages, jobCount: 0, lastRestartTime: Date.now() + staggerMs, restarting: false, id: i }); } logger.info(`Browser pool ready (${BROWSER_COUNT}×${PAGES_PER_BROWSER} = ${BROWSER_COUNT * PAGES_PER_BROWSER} pages)`); }