make指定容量(如slice := make([]int, 0, 1000)),避免运行时因容量不足反复扩容,降低内存分配次数。sync.Pool复用临时对象(如缓冲区、结构体),减少垃圾回收(GC)压力。例如:var bufferPool = sync.Pool{New: func() interface{} { return make([]byte, 1024) }}
func GetBuffer() []byte { return bufferPool.Get().([]byte) }
func PutBuffer(buf []byte) { bufferPool.Put(buf) }
defer关闭文件、数据库连接、网络连接等(如defer file.Close());context.Context传递取消信号,避免goroutine泄漏(如ctx, cancel := context.WithCancel(context.Background()));-ldflags="-s -w"参数,去除调试信息和符号表,减少二进制文件大小(通常可减少30%~50%),从而降低内存加载开销。-gcflags="-m"开启内联函数优化,将小函数调用替换为函数体,减少函数调用的栈开销(可通过go build -gcflags="-m"查看内联建议)。GOGC控制GC触发频率(默认100%,即内存翻倍时触发)。降低GOGC(如export GOGC=50)可减少内存使用,但会增加CPU开销;提高GOGC(如export GOGC=200)则相反,适用于内存充足的场景。runtime.GC()手动触发GC,及时释放无用内存(需谨慎使用,频繁手动GC会影响性能)。runtime.KeepAlive防止slice被GC回收)。/etc/sysctl.conf,降低vm.swappiness(如vm.swappiness=10),减少内存数据交换到Swap空间的概率,提升内存访问速度;vm.max_map_count(如vm.max_map_count=262144),提升内存映射区域数量,适用于高并发服务。systemctl list-units --types service查看运行中的服务,关闭非必需服务(如sudo systemctl stop <service_name>),释放内存资源。apt-get clean清理APT缓存,删除无用软件包;使用rm删除临时文件,释放磁盘和内存空间。_ "net/http/pprof",启动HTTP服务器(如go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }());http://localhost:6060/debug/pprof/heap获取堆内存快照,通过go tool pprof分析内存分配情况(如top查看内存消耗TOP函数,list <函数名>定位具体代码行)。free -m命令查看系统内存使用情况(包括总内存、已用内存、剩余内存、缓存/缓冲区),识别内存瓶颈。GODEBUG=gctrace=1,运行程序后查看GC日志(如GODEBUG=gctrace=1 ./your_program),了解GC触发频率、耗时及内存回收情况,调整GC策略。