发布于2026-07-16 阅读(0)
扫一扫,手机访问
在Ubuntu上用Golang编译时撞上OOM,确实挺让人头疼的。好在社区里已经积累了不少行之有效的解决办法,下面逐一拆解。

给系统加点“后援”——增加交换空间
交换空间(Swap)本质上是磁盘里划出的一块区域,物理内存不够时操作系统会把暂时不用的数据挪过去。操作很简单,先创建一个交换文件,比如分配2GB:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
大小可以根据实际需要调整。想让交换空间重启后依然生效,把下面这行加到/etc/fstab里:
/swapfile none swap sw 0 0
给编译过程“节流”——限制内存使用
Golang编译器本身可以通过GODEBUG环境变量来调节内存消耗。比如下面这行命令会把内存使用控制在1GB左右:
GODEBUG=gctrace=1,GOMAXPROCS=1,GODEBUG=madvdontneed=1 GODEBUG=madvnotneeded=1 go build -o myapp
注意,这样一搞编译速度可能会变慢——毕竟是拿时间换空间了。
清场——关掉不用的服务和程序
编译前用systemctl把那些占内存的后台服务停掉,或者直接用kill干掉不必要的进程。释放出来的几GB往往就能让编译顺利跑完。
检查“家底”——系统资源限制
很多Linux发行版默认会对单进程的内存使用有所限制。先拿ulimit -v看一眼当前的虚拟内存上限:
ulimit -v
如果数值太小,临时调高它,比如设成4GB:
ulimit -v 4194304
不过这招只对当前终端会话有效。想永久生效就得编辑/etc/security/limits.conf文件了。
终极方案——升级硬件
如果上面几步都试过了还是扛不住,那就得认真考虑给机器加点物理内存,或者换块读写更快的固态硬盘。硬件上去了,编译速度和内存压力自然一并解决。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8