最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Golang编译过程中Ubuntu内存不足怎么办
时间:2026-07-19 09:12:48 编辑:袖梨 来源:一聚教程网
1. 增加交换空间(Swap)交换空间是磁盘上的虚拟内存,当物理内存不足时,系统会将部分数据转移至此,缓解内存压力。具体操作如下:

- 创建交换文件(以2GB为例,可根据需求调整大小):
sudo fallocate -l 2G /swapfile - 设置文件权限(仅root可访问):
sudo chmod 600 /swapfile - 将文件初始化为交换空间:
sudo mkswap /swapfile - 启用交换文件:
sudo swapon /swapfile - 永久生效:将以下行添加到
/etc/fstab文件末尾(避免重启后失效):
交换空间能快速解决临时内存不足问题,但磁盘IO速度较物理内存慢,仅作为应急方案。echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2. 优化Golang编译选项通过减少编译产物的冗余信息,降低内存占用:
- 使用
-ldflags参数去除调试符号和符号表(-s去除符号表,-w去除调试信息):
该操作可显著减小二进制文件大小(通常减少30%-50%),从而减少编译过程中的内存消耗。go build -ldflags="-s -w" -o your_app_name
3. 调整编译并行度默认情况下,make或go build会使用所有CPU核心(-j$(nproc)),导致内存峰值过高。通过限制并行进程数,平衡编译速度与内存使用:
make -j2# 根据物理内存大小调整(如4GB内存建议用-j2,8GB内存用-j4)或直接使用go build时限制并行度(GOMAXPROCS):
GOMAXPROCS=2 go build -o your_app_name并行数越小,内存峰值越低,但编译时间会相应延长。
4. 关闭不必要的程序与服务编译过程中,后台运行的程序(如浏览器、视频编辑软件、数据库服务)会占用大量内存。通过以下命令查看内存占用排名:
top# 按“M”键按内存使用排序或使用更直观的htop(需安装:sudo apt install htop):
htop选中占用内存高的非必要进程,按k键终止。
5. 使用交叉编译若本地机器内存不足,可在一台内存充足的机器(如远程服务器)上进行交叉编译,生成适用于目标平台的二进制文件,再传输到本地使用。例如,为Windows系统编译64位程序:
GOOS=windows GOARCH=amd64 go build -o myprogram.exe交叉编译无需在本地运行程序,仅需足够的磁盘空间,能有效规避内存不足问题。
6. 升级物理内存(长期解决方案)若上述方法均无法满足需求,且项目长期需要大量内存编译,最有效的解决方式是升级物理内存(RAM)。例如,将8GB内存升级至16GB或更高,能彻底解决内存瓶颈,提升编译效率。
7. 清理系统内存通过释放系统缓存,增加可用内存:
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches该命令会清理页缓存、目录项和inode缓存(不会影响正在运行的程序),临时释放部分内存。建议在编译前执行,尤其当系统缓存占用过高时。
8. 调整Swappiness参数(可选)Swappiness参数(默认值60)控制系统使用交换空间的倾向,值越高,系统越倾向于使用交换空间(可能导致磁盘IO变慢);值越低,系统越倾向于保留物理内存。若编译时频繁使用交换空间导致速度过慢,可适当降低该值(如设为10):
sudo sysctl vm.swappiness=10若需永久生效,将以下行添加到/etc/sysctl.conf文件末尾:
vm.swappiness=10调整该参数需根据实际使用场景测试,避免过度降低导致内存耗尽。
相关文章
- 逆战未来枪械大全 逆战未来枪械稀有度等级与获取方式详解 07-19
- 逆战未来新手攻略 逆战未来萌新入门避坑指南 07-19
- "无醇啤酒"是完全不含酒精吗 蚂蚁庄园1月17日答案早知道 07-19
- "太常寺"是古代掌管什么事务的机构 蚂蚁新村1月16日答案 07-19
- 四川名菜"开水白菜"就是用开水炖白菜吗 蚂蚁庄园1月17日答案早知道 07-19
- 蚂蚁新村今天正确答案1.16 07-19