在 CentOS 下“优化 Golang 配置”通常可以从 系统环境、Go 自身参数、编译参数、运行时参数、资源限制 几个层面来做。下面按使用场景给你一份实用清单。
Go 高并发程序常受 FD 限制:
# 查看
ulimit -n
# 修改(临时)
ulimit -n 100000
# 永久(/etc/security/limits.conf)
* soft nofile 100000
* hard nofile 100000
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 65535
fs.file-max = 1000000
sysctl -p
CentOS 7 默认 3.10 内核,建议:
go version
建议 ≥ 1.20(GC、调度器都有明显优化)
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=off
go env -w GOMODCACHE=/data/go/mod
go env -w GOPATH=/data/go
go build -ldflags="-s -w" main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
upx --best your_binary
Go 默认已使用全部核心,但在 容器 中需注意:
export GOMAXPROCS=4
或代码中:
runtime.GOMAXPROCS(4)
默认 100,值越小 GC 越频繁:
# 降低内存占用(牺牲 CPU)
GOGC=50
# 降低 GC 次数(牺牲内存)
GOGC=200
import _ "net/http/pprof"
[Unit]
Description=Go App
[Service]
Environment=GOMAXPROCS=4
Environment=GOGC=100
ExecStart=/data/app/server
Restart=always
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
CGO_ENABLED=0 \
GOMAXPROCS=4 \
GOGC=100 \
go build -ldflags="-s -w" -o server main.go
如果你能说明:
我可以给你一套 更针对性的优化方案。