背景:在一台 512M 内存的云服务器上,通过 go install 安装应用程序,报 signal:killed 错误
1. 问题背景
今天在一台 512M 的 CentOS 机器上,执行go install
安装一个 go 程序,编译进程被系统 kill 掉了,查了下是因为内存不足,采用 Swap 分区解决下
1
2
3
| # 现象
→ go install github.com/lupguo/parrot-translate@latest
go build github.com/go-redis/redis/v8: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed
|
1.1. 查看 linux 系统日志 /var/log/message
2. 解决方案
swap 分区开启: http://cn.linux.vbird.org/linux_basic/0230filesystem.php#fstab
开启 swap 交换分区,临时解决服务器内存资源不足情况,具体 swap 开启可以参考鸟哥文章,基本步骤如下:
2.1. 基于 swap 文件方式 (采用)
1
2
3
4
5
6
7
8
9
10
11
| # 创建swap文件
dd if=/development/zero of=/tmp/swap bs=1M count=512
# mkswap格式化
mkswap /tmp/swap
# swapon启动
swapon /tmp/swap
# swap观察
free -h
swapon -s
# swapon停止
swapoff /tmp/swap
|
2.2. 基于分区表方式
1
2
3
4
5
6
7
8
9
10
11
12
| # 基于磁盘分区
fdisk /development/hdc
n: 创建新分区, +512M大小
p: 打印当前分区
m: 帮助
t: 修改系统ID
w: 写入
parrprobe重载分区表
创建swap格式: mkswap /development/hdc7
free观察
swapon /development/ddc7
swapon -s 观察
|
3. 补充: Go1.17 版本把 go get 和 go install 语义重新区分清楚了
go 1.17 版本,把go get
和go install
语义区分清楚了,通过go install pkg@version
替代了
参考:https://golang.org/doc/go-get-install-deprecation
大意:从 Go 1.17 开始,go get
不推荐用来安装可执行文件,采用go install
替代;1.18 版本go get
则将不再构建包,仅用于添加、更新或删除 go.mod,即go get
将始终表现得好像启用-d
依赖标志。
1
2
3
4
5
| → go get -v github.com/lupguo/parrot-translate
go get: installing executables with 'go get' in module mode is deprecated.
Use 'go install pkg@version' instead.
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
|