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

在Google Cloud Run容器中运行Puppeteer时内存快照失败求助

解决Cloud Run中PuppeteerCrawler的"Memory snapshot failed"错误

错误来源说明

这个错误来自Apify PuppeteerCrawler的内置内存监控模块,而非原生Puppeteer或Chromium本身。PuppeteerCrawler默认会定期抓取内存快照来监控爬虫状态,当快照生成失败时就会抛出该错误。

具体解决步骤

  • 直接禁用内存快照功能
    在PuppeteerCrawler配置中添加参数关闭快照,这是最快解决报错的方式:

    const crawler = new PuppeteerCrawler({
        launchContext: {
            launchOptions: {
                headless: true,
                args: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage', '--disable-setuid-sandbox'],
                executablePath: 'google-chrome-stable'
            },
        },
        // 禁用内存快照
        memorySnapshotOptions: { enabled: false },
        // 其他爬虫配置(如handlePageFunction等)
    });
    
  • 修正Chromium启动参数
    你当前的参数中disable-dev-shm-usage缺少前缀--,正确写法是--disable-dev-shm-usage。这个参数会强制Chromium使用临时文件而非/dev/shm(Cloud Run中/dev/shm空间有限),是避免内存相关问题的关键配置。

  • 优化爬虫内存占用
    即使分配了16GB内存,不合理的爬虫配置仍可能触发内存快照失败:

    • 降低并发数:Cloud Run环境中建议设置maxConcurrency: 2或更低,避免同时启动过多Chromium实例
    • 主动清理页面:在handlePageFunction中处理完页面后,立即调用await page.close()释放资源
    • 禁用不必要的资源加载:添加--disable-images、--disable-javascript(若爬取无需JS渲染)等参数,减少Chromium资源占用
  • 排查特定页面问题
    测试爬取单个静态简单页面,若不再报错,说明是部分目标页面内存占用过高导致快照失败。此时可以:

    • 给这类页面设置更长的超时时间
    • 拆分爬取任务,分批次处理高负载页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:40:51