Go1.22更加强大的Go执行跟踪追踪快照视频文件tracego执行跟踪goroutine

原文[1]:MichaelKnyszek-2024.03.14

追踪的魔力在于,它可以轻易地揭示出程序中那些难以通过其他方式看到的信息。例如,一个并发瓶颈可能是很多goroutine在同一个channel上阻塞,这在CPUprofile中可能很难被看到,因为没有执行样本可以采样。但在执行追踪中,执行的缺失或不足将以惊人的清晰度展现出来,被阻塞的goroutine的堆栈追踪将迅速指向问题根源。

问题

不幸的是,执行追踪中的丰富信息往往无法触及。历史上,四个主要问题阻碍了追踪的使用。

追踪的开销很大。追踪的扩展性不强,可能会变得过大而无法分析。往往不清楚何时开始追踪以捕获特定的不良行为。鉴于缺乏用于解析和解释执行追踪的公共包,只有最具冒险精神的gopher才能编程分析追踪。

低开销的追踪

在Go1.21之前,许多应用的追踪运行时开销大约在10-20%的CPU之间,这限制了追踪的使用情况,不能像CPUprofiling那样持续使用。事实证明,追踪的大部分成本都归结于traceback。运行时产生的许多事件都附带有堆栈追踪,这些对于实际识别goroutine在关键执行时刻的行为是非常有价值的。

可扩展的追踪

追踪格式及其事件的设计主要考虑到了相对高效的数据生成和输出(emission),但需要工具来解析和保留整个追踪的状态。几百MiB的追踪可能需要几GiB的RAM来分析!

不幸的是,这个问题对于跟踪的生成方式至关重要。为了保持运行时开销低,所有事件都被写入等同于线程局部缓冲区的地方。但这意味着事件出现的顺序并非其真实顺序,追踪工具需要负责弄清楚究竟发生了什么。

使追踪在保持开销低的同时具有可扩展性的关键是,不定期地切分正在生成的追踪。每个切分点都会表现得有点像同时禁用和重新启用追踪。到目前为止的所有追踪数据都会代表一个完整且自包含的追踪,而新的追踪数据将无缝地接续前者。

你可能想象到,修复这个问题需要在运行时重新思考和重写追踪实现的很多基础部分[9]。我们很高兴地说,这项工作在Go1.22中完成,并且现在已经普遍可用。许多很好的改进[10]随着重写一起出现,包括对gotooltrace命令[11]的一些改进。如果你感到好奇,所有的细节都在设计文档[12]中。

(注意:gotooltrace仍然将完整的追踪加载到内存中,但现在已经可以移除这个限制[13],用于Go1.22+程序生成的追踪。)

Flightrecording

有一种可以帮助解决这个问题的技术,叫做Flightrecording,你可能已经在其他编程环境中熟悉了。Flightrecording的关键理念是,持续进行追踪,并始终保留最新的追踪数据,以便随时使用。然后,一旦发生了有趣的事情,程序就可以直接写出它所拥有的所有内容!

在追踪可以被切分之前,这基本上是无法实现的。但是,由于开销较低,连续跟踪现在是可行的,以及运行时现在可以在需要的时候随时切分追踪,结果,实现Flightrecording非常简单。

因此,我们很高兴宣布一个Flightrecorder实验特性,可在golang.org/x/exp/trace包[14]中找到。

追踪readerAPI

我们认为它足够好以开始在其之上构建东西,所以请试试看!下面是一个示例,它测量了阻塞等待网络的goroutine阻塞事件的比例。

//从STDIN开始读取。r,err:=trace.NewReader(os.Stdin)iferr!=nil{log.Fatal(err)}varblockedintvarblockedOnNetworkintfor{//读取事件。ev,err:=r.ReadEvent()iferr==io.EOF{break}elseiferr!=nil{log.Fatal(err)}//处理事件。ifev.Kind()==trace.EventStateTransition{st:=ev.StateTransition()ifst.Resource.Kind==trace.ResourceGoroutine{id:=st.Resource.Goroutine()from,to:=st.GoroutineTransition()//寻找阻塞的goroutines,并计数。iffrom.Executing()&&to==trace.GoWaiting{blocked++ifstrings.Contains(st.Reason,"network"){blockedOnNetwork++}}}}}//打印我们找到的内容。p:=100*float64(blockedOnNetwork)/float64(blocked)fmt.Printf("%2.3f%%instancesofgoroutinesblockingweretoblockonthenetwork\n",p)

就像Flightrecorder一样,proposalissue[16]将是留下反馈的好地方!

我们要特别提一下DominikHonnef,他是早期的试用者,提供了很好的反馈,并且对API的旧版追踪提供了支持。

感谢你们!

你们所有人的讨论、反馈和投入的工作,对我们取得今天的成就发挥了重要作用,谢谢你们!

THE END
1.查重狗论文查重招商GoCheck论文查重招商-论文查重集成平台,开启代理招商加盟中提供各类定稿查重系统、论文格式规范排版等功能,自此论文检测行业从人工检测迈入自动检测新时代安全、高效、操作方便的系统。https://www.gocheck.com/
2.Gocheck论文检测报告真伪验证入口Gocheck.cn论文检查专家的送检文件:毕业论文的完成版送检时间:2017-05-3.13:52总类似比:26.98%测量指标:自我记录率73.02%复印率10.18%引用率16.80%其他指标:表上0个脚注0个端注0个如何识别假货?检查报告书没有对应官方网站的验证的情况下,全部都是假的,在验证时会反馈信息。对不起,您的论文检查如下。Gocheck.cn...http://www.cnki100.com/chachong/10137.html
1.gocheck用什么方法查重怎么用gocheck查重1.知网的论文查重:知网的论文查重是自动识别目录然后一章一章拆分比对,连续超过一定字数后便会被系统识别出来。 2.gocheck的论文查重:gocheck的论文查重是将句子的主要语义片段同系统的资源比对,超过系统阀值就会被检测出来。 (三)引用不同。 1.知网的论文查重:知网的论文查重文中的数字部分和在Word自带的插入脚注...http://www.cleverschool.com/chachong/212338.html
2.加入我们4、员工生日福利 5、传统节假日福利 6、美味的下午茶、丰富的团建活动 7、5A级写字楼工作环境,地铁口周边,交通便利。 8、充足的学习、培训机会 联系方式 简历发送至邮箱HR@gocheck.cn 邮件注明您所应聘的职位 公司名称:通远网络股份有限公司 招聘电话:18810971573 公司网址:http://www.gocheck.cn 销售经理(湖北...https://www.gocheck.cn/page/Recruiting.jsp
3.gocheck论文查重原则(gocheck在线论文检测g格子达免费论文查重...论文查重网站基于强大的精准检测算法以及稳定快速的检测云服务器,严格、准确、高效的论文检测系统,能够全面的查出文献中所存在的学术不端等问题。 这篇是篇免费的与查重检测方面有关研究,是一篇论文相似度查重学习。 一、gocheck论文查重原则 准确率还是挺高的,依据的是语意识别,超过50%相似就算重复了,因为这也是...https://www.creativecommons.cn/gochecklunwenchachongyuanze.html
4.www.tup.tsinghua.edu.cn/upload/books/yz/091795#e.g. 'localhost=xx.xx.xxx.2 localport=12211 localheartbeatport=12214 remotehost=xx.xx.xxx.3 remoteport=12212 remoteheartbeatport=12215, localhost=xx.xx.xxx.2 localport=12213 remotehost=xx.xx.xxx.3 remoteport=12214' #%r = remote host and port alarm_report_interval = 10 support_...http://www.tup.tsinghua.edu.cn/upload/books/yz/091795-01.txt
5.查重狗论文查重招商GoCheck论文查重招商-论文查重集成平台,开启代理招商加盟中提供各类定稿查重系统、论文格式规范排版等功能,自此论文检测行业从人工检测迈入自动检测新时代安全、高效、操作方便的系统。http://www.weipua.com/
6.论文查重软件哪些好详细说明本文介绍了几种主流的论文查重软件,包括知网、万方、维普、小发猫、小狗伪原创、Paperright和Gocheck,分别强调了它们的权威性、性价比、全面检测和创新性。作者提醒读者选择时要注意软件的准确性和安全性,以及保护个人隐私。 摘要由CSDN通过智能技术生成 大家好,今天来聊聊论文查重软件哪些好,希望能给大家提供一点参考。 https://blog.csdn.net/2301_81337765/article/details/134706347
7.check免费查重适用:本科论文、专科论文、小论文查重。2、Gocheck系统链接:/适用:本科论文、专科论文、研究生论文、博士论文、期刊论文等。3、Paperyy系统链接:/适用:本科论文、专科论文、研究生论文、博士论文、期刊论文等。4、PaperOK系统链接:/适用:本科论文、专科论文、研究生论文、博士论文、期刊论文等。5、paperFree链接:/适用...https://www.igaichong.com/article/dd3e59f7e5bca2db2c7a54c2.html
8.十大查重软件排名论文查重软件有哪些论文降重复率的软件推荐→...格子达和Gocheck是国内老牌的论文查重系统,现已合并。G·格子达论文检测系统具有检测原理强大、效率高、误判率低等优势。文献资源库除了数亿级网页资源外,还有超过千万篇文献且每周不断更新,涵盖各大学术期刊库、Tonda学位论文库、互联网论文库等。再配合可上传文献的资源中心功能,使论文相似性对比更具专业性和广泛性...https://m.maigoo.com/top/419704.html