如何在基于自定义Docker镜像的AWS Lambda中禁用核心转储?
解决Lambda中Docker镜像运行Chromium时的核心转储问题
针对你遇到的Chromium崩溃生成大体积核心转储导致Lambda磁盘耗尽的问题,以下是几种彻底禁用或有效处理的方案:
方案一:在Docker镜像构建阶段全局禁用核心转储
在自定义Docker镜像的Dockerfile中添加系统级配置,彻底禁用核心转储:
# 全局设置核心转储限制为0 RUN echo "* soft core 0" >> /etc/security/limits.conf RUN echo "* hard core 0" >> /etc/security/limits.conf # 或者在Lambda启动脚本开头添加ulimit设置(若使用自定义启动脚本) # ulimit -c 0
构建镜像时应用这些配置,容器启动后所有进程(包括Chromium)都会继承核心转储禁用的规则。
方案二:通过Chromium启动参数禁用崩溃转储
Chromium支持通过启动参数关闭崩溃报告和核心转储生成,在Puppeteer启动Chromium时添加以下参数:
const browser = await puppeteer.launch({ args: [ '--disable-crash-reporter', '--disable-breakpad', '--no-sandbox', // Lambda环境通常需要此参数 '--disable-dev-shm-usage' // 同时避免共享内存不足引发的崩溃 ], executablePath: await chromium.executablePath(), });
这些参数会直接阻止Chromium在崩溃时生成核心转储文件,从根源解决问题。
方案三:Lambda函数启动时自动清理旧核心文件
如果前两种方案无法完全生效,可以在Lambda函数执行的最开始阶段,主动清理/tmp目录下的核心转储文件:
const fs = require('fs'); const path = require('path'); // 清理/tmp下的Chromium核心文件 const tmpDir = '/tmp'; fs.readdirSync(tmpDir).forEach(file => { if (file.startsWith('core.chromium.')) { fs.unlinkSync(path.join(tmpDir, file)); } });
这样即使有残留的核心文件,也会在每次函数调用时被清理,避免磁盘空间被持续占用。
内容的提问来源于stack exchange,提问作者user3738870
相关产品推荐
相关产品推荐

