【发布时间】:2022-01-08 01:27:49
【问题描述】:
我面临的问题是我们有一个具有 500MB RAM 和 2CPU 内核的 docker 容器,这使得编译变得不稳定。有时它有效,有时则无效。虽然显而易见的解决方案是增加 RAM 内存,但我们无法继续增加内存。
因此我的问题是,给定一组依赖项,是否可以预先确定编译我的 go 代码所需的内存,如果可以,如何?
虽然有pprof,但好像是用来跟踪应用内存的。
以下结果取自golangci-lint
执行的命令:
golangci-lint run --issues-exit-code 1 --no-config --disable-all -E typecheck --enable=gosec --enable=unparam --enable=unconvert --enable=gocritic --enable=ineffassign --enable=staticcheck --enable=dupl --enable=gocyclo --enable=gofmt --enable=golint --enable=deadcode --enable=errcheck --enable=gosimple --enable=govet --enable=structcheck --enable=typecheck --enable=unused --enable=varcheck
结果:
INFO File cache stats: 0 entries of total size 0B
INFO Memory: 22 samples, avg is 58.7MB, max is 66.8MB
INFO Execution took 2.063380705s
【问题讨论】:
-
实际上,您可以尝试使用各种内存限制运行编译器,看看它何时开始/停止工作unix.stackexchange.com/questions/44985
-
“我们不能继续增加内存”这在技术上是正确的,但无关紧要。现在是 2022 年; 500 MB 的内存并不多。您的内存消耗不会以数量级无限增长。给你的构建环境更多。你的时间对你来说比 500GB 的微不足道的成本更有价值。
-
这里youtube.com/watch?v=qPIB3STWXVk (> 30m) 你可以了解更多关于编译器工具的信息。大多数情况下,您可以 memprofile 编译过程和其他内容。通过其余的演练,您可以了解标志。因此,您可以尝试一些 settigns 设置来获得适合您的设置。虽然,天真的理解,系统应该将页面交换到磁盘以花费更长的时间,但避免OOM,从而提高成功率。它不是 ?您的报告也缺少详细信息。您正在显示 gitlab 命令行,这还不够。
标签: go memory memory-management compilation