go 建议:runtime/pprof:未使用/重复/机会堆分析 翻译结果:建议:runtime/pprof:未使用/重复/机会进行堆分析,

bttbmeg0  于 4个月前  发布在  Go
关注(0)|答案(4)|浏览(37)

提案详情

有一些常见的“错误”(或错失的机会)会导致堆大小增加:

  • 读取大量内存,然后通过 []byte / string 仅引用其中的一些位(取决于分离)
  • 在读取一些数据后产生大量重复的字符串(取决于内部化)
  • 结构体中的对齐填充(取决于字段重新排序)
  • 也许我们可以找到更多的机会

潜在的运行时可能会进行昂贵的分析(为了简单起见,可以从 STW 开始),并使用这些错失的机会生成一个性能分析报告。具体来说,在对象级别上运行堆标记(仅标记/扫描可达部分的对象);运行完整的堆复制分析(按对象大小/类型/内容进行哈希),然后将此与堆分析数据相交并输出交集。
这可能提供一种非常节省成本的优化堆大小的方法。例如,这个栈分配了 N GB,其中 99% 是不可达的,或者这个栈分配了 M GB 的重复字符串等。

7vhp5slm

7vhp5slm1#

抱歉,如果这个已经被提议/讨论过了,我没有关注最近的发展。

ctehm74n

ctehm74n2#

这听起来像是gocore的一个很好的用例(参见#57447)。

daupos2t

daupos2t3#

我同意,我想这会使实施变得更容易。

t1rydlwq

t1rydlwq4#

我对于将如此昂贵的物品(包括与除P数量之外的其他事物成比例的STW)作为runtime/pprof.Profile暴露出去感到不安。
另外,通过gocore进行离线分析时加1。

相关问题