一段时间内的堆分配情况

问题描述 投票:0回答:0

我正在尝试分析我正在运行的服务器。我主要关注https://artem.krylysov.com/blog/2017/03/13/profiling-and-optimizing-go-web-applications/

我添加以下代码以允许分析:

    mux.HandleFunc("/debug/pprof/", pprof.Index)
    mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
    mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
    mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
    mux.HandleFunc("/debug/pprof/trace", pprof.Trace)

我开始一些基准测试并运行

go tool pprof http:/.1:8080/debug/pprof/profile?seconds=5
,这按预期工作,因为它在 5 秒内分析了 cpu。

我想对堆做同样的事情。但是,如果我这样做

go tool pprof -alloc_objects http:/.1:8080/debug/pprof/profile?seconds=5
我会得到所有分配,而不仅仅是最后五秒钟的分配。

在我的特殊情况下,我在启动时运行了很多分配,它们掩盖了所有其他分配。是否可以将它们限制在这个时期内?如果我执行跟踪,我可以看到堆在增加,但我无法查询那里有什么对象。

我尝试拍摄两个不同的堆快照,并使用带有 --base 的 go tool pprof。但是它不起作用,它显示 0 差异。我的猜测是对象与分配的总内存相比太小,所以它们没有保存到配置文件中。

go profiling heap-memory
© www.soinside.com 2019 - 2024. All rights reserved.