pprof本身不生成本地缓存,GoLand也不会自动保存profile数据;go tool pprof默认在内存或系统临时目录(如/tmp)中处理,用完即弃,仅当手动指定-output时才生成可清理的文件。

pprof 本身不生成本地缓存,GoLand 也不会自动保存 profile 数据
很多人以为 GoLand 会像 IDE 缓存一样把 pprof 下载的 profile 文件(如 profile、heap)存到某个目录长期保留——其实不会。go tool pprof 默认是内存中解析或临时写入系统临时目录(如 /tmp 或 $TMPDIR),用完即弃。GoLand 只是调用这个命令,它自身不接管、不归档这些二进制 profile 文件。
所以你找不到“pprof 缓存目录”去清理,也无需专门清理——除非你手动用 -output 或重定向保存了文件,比如:
go tool pprof -output=cpu.pb.gz http://localhost:6060/debug/pprof/profile?seconds=30
这种情况下,cpu.pb.gz 就是你自己创建的文件,删它就行。
真正要清理的是 Go 构建缓存,它会影响 pprof 符号解析
当你用 go tool pprof 分析远程或本地 profile 时,如果提示 ???、no source found 或函数名全是 runtime.mallocgc,大概率不是 pprof 缓存问题,而是本地缺少带调试符号的二进制文件。而这个二进制往往来自你最近一次 go build 的产物,它依赖 $GOCACHE 中的中间对象。
清理构建缓存能强制重新编译,确保你拿到的是当前代码对应的、未 strip 的二进制(尤其重要):
- 运行
go clean -cache清空$GOCACHE(默认 macOS 在~/Library/Caches/go-build,Linux 在$XDG_CACHE_HOME/go-build) - 重新用
go build -o myapp编译(**不要加-ldflags="-s -w"**,否则丢符号) - 再用
go tool pprof myapp http://.../profile,就能看到函数名和行号了
GoLand 内置 Terminal 中运行 pprof 时的临时文件残留
如果你在 GoLand 的 Terminal 里反复执行 go tool pprof,又没指定 -output,它仍可能在当前工作目录或 /tmp 下留下临时文件(比如火焰图 svg、pdf,或交互式会话的缓存)。这类文件不会自动清理,但命名通常含随机串,例如:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
pprof001.svg pprof2389423842384238423.pdf
排查方法:
- 检查当前 Terminal 所在目录:
ls -t pprof* - 检查系统临时目录:
ls -t /tmp/pprof*(macOS/Linux)或dir %TEMP%\pprof*(Windows PowerShell) - 直接删:
rm /tmp/pprof*(注意通配符别误删其他文件)
为什么你总觉得“有缓存”?其实是浏览器或 HTTP 客户端缓存了 pprof 页面
访问 http://localhost:6060/debug/pprof/ 时,浏览器可能缓存了 HTML 列表或某些 profile 响应(尤其是 /debug/pprof/heap?debug=1 这类文本响应)。这会导致你刷新后看到的还是旧数据,误以为是 GoLand 或 pprof “留了缓存”。
解决办法很简单:
- 强制刷新页面:
Cmd+Shift+R(macOS)或Ctrl+F5(Windows/Linux) - 用
curl -H "Cache-Control: no-cache"测试,确认服务端是否真返回新数据 - 别依赖浏览器 UI 查 profile,改用命令行:
curl -s "http://localhost:6060/debug/pprof/heap?debug=1" | head -20
真正的瓶颈从来不在缓存路径里,而在你是否用了带符号的二进制、是否绕过了框架路由、是否限制了 pprof 访问权限——这些点比找“缓存目录”关键得多。










