Heroku编译Slug体积过大但无法定位大文件问题求助
Heroku Slug过大排查与体积缩减方案
为什么容器内/app显示空间小?
Heroku的slug是构建阶段生成的压缩包,包含所有构建产物、依赖、代码等;而heroku run bash进入的是运行时容器,部分构建过程中的临时文件、缓存甚至依赖可能被清理或未挂载到/app目录,所以两者的文件结构和大小差异很大,不能用运行时容器的du结果判断slug的实际构成。
定位slug内大文件的方法
- 安装Heroku slug分析插件:
这个命令会列出slug内各目录/文件的大小占比,直接定位大文件位置。heroku plugins:install heroku-slug-size heroku slug-size -a pitchcast - 本地模拟构建:在本地项目目录下,执行
heroku build(或手动模拟pip安装依赖的过程),然后用du -ha查看本地生成的构建文件,排查大文件。 - 查看构建日志:运行
heroku logs --tail -a pitchcast,找构建过程中被添加到slug的大文件记录,比如依赖包下载、静态文件打包的日志。
体积缩减实操方法
- 精简依赖:
requirements.txt只保留生产环境必要依赖,开发依赖(如pytest、black)移到requirements-dev.txt,构建时只安装生产依赖。- 安装依赖时添加
--no-cache-dir参数,避免缓存文件被打包进slug:pip install --no-cache-dir -r requirements.txt
- 配置
.slugignore文件:在项目根目录创建该文件,添加需要排除的路径,比如:.git/ __pycache__/ tests/ *.log data/ venv/ node_modules/ - 清理构建临时文件:在Heroku的构建脚本(如
Procfile或app.json的build命令)中添加清理步骤,比如:pip cache purge && rm -rf /tmp/* - 拆分大资源:如果有大模型、数据集或静态文件,不要打包进slug,改用外部存储服务,运行时通过代码动态下载加载。
- 优化buildpack:使用官方Python buildpack的优化选项,或避免使用多余的buildpack,减少不必要的构建产物。
内容的提问来源于stack exchange,提问作者dfried
相关产品推荐
相关产品推荐

