Go 构建缓存过大的清理方法
1. 问题现象
在 Linux 系统上进行批量 go build 操作后,可能会出现磁盘空间被占满的情况,需要找到占用空间较大的目录并进行清理。
2. 环境信息
| 项目 | 说明 |
|---|---|
| CPU | 3A5000 |
| 系统 | Debian 10 |
3. 排查步骤
3.1 检查根目录占用情况
[root@bogon merore]# du -sh --exclude=/home/merore /
说明:由于家目录下挂载了远程文件系统,所以先排除家目录,检查其他目录的占用情况。
3.2 检查家目录占用情况
[root@bogon merore]# du -sh --exclude=/home/merore/workspace /home
122G /home
3.3 检查隐藏目录
[root@bogon merore]# du -sh .cache
119G .cache
[root@bogon .cache]# du -sh ./*
...
119G ./go-build
...
结论:确认是 /home/merore/.cache/go-build 目录占用了大量空间。
4. 解决方案
4.1 清理 Go 构建缓存
go clean -cache
4.2 其他清理选项
| 命令 | 作用 |
|---|---|
go clean -cache |
清理构建缓存 |
go clean -modcache |
清理模块缓存 |
go clean -i |
清理已安装的包 |
go clean -r |
递归清理依赖 |
5. 预防措施
5.1 定期清理缓存
可以将清理命令添加到 crontab 中,定期执行:
# 每月清理一次 Go 缓存
0 0 1 * * go clean -cache
5.2 调整缓存目录
可以通过设置环境变量 GOCACHE 来指定缓存目录,将其放在空间较大的分区:
# 在 ~/.bashrc 或 ~/.zshrc 中添加
export GOCACHE=/path/to/large/partition/.cache/go-build
5.3 优化构建过程
- 使用
-trimpath选项减少构建缓存大小:bash go build -trimpath - 对于大型项目,考虑使用构建缓存服务器
6. 相关命令
6.1 du 命令使用技巧
du -sh <directory>:查看目录大小du -sh --exclude=<directory> <path>:排除指定目录du -h --max-depth=1 <directory>:查看一级子目录大小
6.2 Go 命令相关选项
go env:查看 Go 环境变量,包括缓存目录位置go env GOCACHE:查看当前缓存目录go mod tidy:清理未使用的依赖
7. 总结
- 问题原因:Go 构建过程中会在
~/.cache/go-build目录中生成大量缓存文件 - 解决方案:使用
go clean -cache命令清理缓存 - 预防措施:定期清理缓存、调整缓存目录位置、优化构建过程
- 实用技巧:使用
du命令的--exclude选项排查磁盘占用情况
通过以上方法,可以有效管理 Go 构建缓存,避免磁盘空间被占满的问题。