goland 不生成内存泄露转储文件,而是通过配置 godebug 环境变量和启用 net/http/pprof 端点(如 localhost:6060),由 go 程序自身生成 heap profile;文件保存路径由工作目录和重定向决定,分析需用 go tool pprof 交互式查看 top -cum、list 及多时间点 inuse_space 趋势。

GoLand 本身不生成内存泄露转储文件
GoLand 是 IDE,不是运行时环境,它不负责生成、捕获或保存 Go 程序的内存 dump 文件。所谓“本地内存泄露转储文件”,实际是 Go 运行时在崩溃(如 fatal error: out of memory)或被信号中断时,通过环境变量触发的堆栈快照,或者由 pprof 在运行中采集的 heap profile —— 这两类文件都由 Go 程序自身产生,和 GoLand 无关。
真正起作用的是 GODEBUG 和 pprof HTTP 端点
要让 Go 程序在崩溃时写入堆栈信息(类似 dump),必须设置 GODEBUG 环境变量;要持续观察内存增长趋势,则必须启用 net/http/pprof 并暴露端点。GoLand 只能帮你配置这两者的启动参数:
- 在 Run Configuration → Environment variables 中添加:
GODEBUG="gctrace=1,madvdontneed=1"(后者可选,帮助 GC 更积极归还内存) - 确保代码里有:
_ "net/http/pprof"+go http.ListenAndServe("localhost:6060", nil) - 不要用
0.0.0.0:6060(尤其 macOS/Linux),避免被防火墙拦截或绑定失败 - GoLand 的 Terminal 或 Run 面板输出里,留意是否出现
http: listening on localhost:6060,没这句说明 pprof 没跑起来
heap profile 文件路径由你手动控制,不是 GoLand 决定
你执行 curl -s "http://localhost:6060/debug/pprof/heap?debug=1" > heap_$(date +%s).txt,这个 heap_1724000000.txt 文件存哪,完全取决于 shell 当前工作目录和重定向路径。GoLand 不干预也不记录该路径。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 想固定保存位置?在 Run Configuration 的 Working directory 设为
D:\go-dumps(Windows)或/Users/you/go-dumps(macOS/Linux) - 想用脚本自动采集?在 GoLand Terminal 里运行:
while true; do curl -s "http://localhost:6060/debug/pprof/heap?debug=1" > heap_$(date +%s).txt && sleep 30; done - 别用
?debug=0直接下载二进制 ——go tool pprof解析时容易丢失调用链深度,文本格式(?debug=1)才方便比对增长点
pprof 分析时最容易忽略的三件事
即使你拿到了一堆 heap_*.txt,直接打开看 top 排名毫无意义。真正定位泄漏源头,得靠交互式分析:
-
go tool pprof http://localhost:6060/debug/pprof/heap启动后,先输top -cum,不是top—— 看累积分配量,才能揪出最上层业务函数 - 用
list your_package.(*YourStruct).LeakMethod定位到具体某行make([]byte, 1024*1024),而不是只看到runtime.mallocgc - 连续采样至少 3–5 个时间点,对比
inuse_space是否稳定 —— 如果每分钟涨 20MB 且 GC 频次下降,才是真泄漏;单次 snapshot 很可能只是临时高峰
真正难的不是拿到文件,而是确认那个 inuse_space 曲线是不是在爬升、以及 top -cum 输出里谁在反复调用 make 却没复用缓冲区。这些判断没法靠 IDE 自动完成,得你盯着数字看。










