Gatsby构建遇std::bad_alloc错误,GitLab CI任务失败求助
解决Gatsby构建
std::bad_alloc导致GitLab CI失败的方案 核心原因
std::bad_alloc是内存分配失败的报错,GitLab Runner容器默认内存配额不足是最常见诱因——Gatsby构建过程中处理静态资源、数据节点时会占用大量内存。
具体解决步骤
1. 提升GitLab Runner容器内存配额
- 打开Runner配置文件(通常路径为
/etc/gitlab-runner/config.toml) - 在对应Runner的
[[runners]]段内添加/修改Docker内存配置:
(这里设置容器内存4G、交换内存8G,可根据项目规模调整)[runners.docker] memory = "4096m" memory_swap = "8192m" - 重启Runner服务:
sudo gitlab-runner restart
2. 优化Gatsby构建内存占用
- 在项目根目录的
gatsby-node.js中添加Webpack性能配置,减少内存消耗:exports.onCreateWebpackConfig = ({ actions }) => { actions.setWebpackConfig({ performance: { hints: false, maxAssetSize: 512000, maxEntrypointSize: 512000, }, }) } - 禁用不必要的插件,尤其是那些大量抓取数据或生成冗余节点的插件
- 清理无用依赖:执行
npm prune移除未使用的包,减轻构建负载
3. 调整GitLab CI构建脚本
- 在
gitlab-ci.yml的构建阶段添加Node.js内存限制变量:
该配置限制Node.js使用3G内存,避免超出容器配额build: stage: build script: - export NODE_OPTIONS="--max-old-space-size=3072" - npm install - gatsby build
4. 排查其他潜在问题
- 检查项目内是否有大量未优化的高分辨率图片,这类资源会大幅增加内存消耗,建议提前压缩处理
- 尝试更换GitLab Runner使用的Docker镜像,比如官方
node:18-alpine镜像,避免镜像本身的内存泄漏问题
内容的提问来源于stack exchange,提问作者Toddrickson
相关产品推荐
相关产品推荐

