使用trace进行排查网络瓶颈

news/2025/9/25 17:48:55/文章来源:https://www.cnblogs.com/chongyao/p/19111673
func NewHTTPTraceLogger(ctx context.Context, fileUrl string, fragmentID, attempt int) context.Context {traceStart := time.Now()var dnsStart, connectStart, tlsStart, gotConnTime time.Timetrace := &httptrace.ClientTrace{DNSStart: func(info httptrace.DNSStartInfo) {dnsStart = time.Now()},DNSDone: func(info httptrace.DNSDoneInfo) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d DNSDone: %+v cost=%v",fileUrl, fragmentID, attempt, info, time.Since(dnsStart))},ConnectStart: func(network, addr string) {connectStart = time.Now()},ConnectDone: func(network, addr string, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d ConnectDone: %s %s err=%v cost=%v",fileUrl, fragmentID, attempt, network, addr, err, time.Since(connectStart))},TLSHandshakeStart: func() {tlsStart = time.Now()},TLSHandshakeDone: func(cs tls.ConnectionState, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d TLSHandshakeDone err=%v cost=%v",fileUrl, fragmentID, attempt, err, time.Since(tlsStart))},GotConn: func(connInfo httptrace.GotConnInfo) {gotConnTime = time.Now()total := time.Since(traceStart)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotConn reused=%v idleTime=%v total=%v",fileUrl, fragmentID, attempt, connInfo.Reused, connInfo.IdleTime, total)},GotFirstResponseByte: func() {ttfb := time.Since(gotConnTime)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotFirstResponseByte TTFB=%v",fileUrl, fragmentID, attempt, ttfb)},}return httptrace.WithClientTrace(ctx, trace)
}

  使用:

func NewHTTPTraceLogger(ctx context.Context, fileUrl string, fragmentID, attempt int) context.Context {traceStart := time.Now()var dnsStart, connectStart, tlsStart, gotConnTime time.Timetrace := &httptrace.ClientTrace{DNSStart: func(info httptrace.DNSStartInfo) {dnsStart = time.Now()},DNSDone: func(info httptrace.DNSDoneInfo) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d DNSDone: %+v cost=%v",fileUrl, fragmentID, attempt, info, time.Since(dnsStart))},ConnectStart: func(network, addr string) {connectStart = time.Now()},ConnectDone: func(network, addr string, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d ConnectDone: %s %s err=%v cost=%v",fileUrl, fragmentID, attempt, network, addr, err, time.Since(connectStart))},TLSHandshakeStart: func() {tlsStart = time.Now()},TLSHandshakeDone: func(cs tls.ConnectionState, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d TLSHandshakeDone err=%v cost=%v",fileUrl, fragmentID, attempt, err, time.Since(tlsStart))},GotConn: func(connInfo httptrace.GotConnInfo) {gotConnTime = time.Now()total := time.Since(traceStart)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotConn reused=%v idleTime=%v total=%v",fileUrl, fragmentID, attempt, connInfo.Reused, connInfo.IdleTime, total)},GotFirstResponseByte: func() {ttfb := time.Since(gotConnTime)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotFirstResponseByte TTFB=%v",fileUrl, fragmentID, attempt, ttfb)},}return httptrace.WithClientTrace(ctx, trace)
}

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五项能力斩获满分!天翼云云WAF获IDC权威认可!

近日,国际数据公司(IDC)发布《协同大模型防火墙能力的中国WAAP厂商技术能力评估,2025》报告,围绕Web安全、Bot管理、威胁情报等核心现代应用防护需求,对厂商的产品技术与服务能力展开全面考察。天翼云云WAF产品在…

什么样的代码可以称得上是好代码? - 浪矢

目录 好代码不仅需满足功能需求,还要考虑未来的拓展,问题的排查,用户的体验和成本控制。 在Code Review & 开发行为规范中我从代码开发与实现规范,异常处理规范,日志管理规范以及版本控制与写作规范四个维度梳…

抖胆代理商,DD3118S芯片,USB3.0读卡方案,替代GL3213S方案

抖胆代理商,DD3118S芯片,USB3.0读卡方案,替代GL3213S方案DD3118s是抖胆科技推出的一款读卡器控制芯片,DD3118S基于40nm低功耗工艺设计,集成了USB 3.0、SD 3.0和eMMC 4.5协议支持能力。其最大特点是创新性地采用了…

JavaEE 导读与环境配置 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深圳 响应式网站建设广州网站推广哪家强

在C中,函数参数的传递方式主要有三种:值传递、引用传递和指针传递。下面我会分别解释这三种方式的区别: 值传递(Pass by Value): 值传递是将实际参数的值复制给函数的形式参数。这意味着函数接收的是原始数据的一个副本…

中宁网站建设公司网页美工设计中职期末试卷

【漏洞详情】 漏洞描述:Alibaba Nacos derby 存在远程代码执行漏洞,由于Alibaba Nacos部分版本中derby数据库默认可以未授权访问,恶意攻击者利用此漏洞可以未授权执行SQL语句,从而远程加载恶意构造的jar包,最终导致任意…

南昌网站排名ui设计师的工作内容是什么

为当前组件添加内容模糊效果。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 foregroundBlurStyle foregroundBlurStyle(value: BlurStyle, options?: ForegroundBlurStyleOptions) 为当前组件提供…

番禺网站建设优化推广wordpress 离线编辑器

Scrum作为一种敏捷开发方法,具有许多优势,但也面临一些挑战。以下是Scrum的主要优势和挑战: Scrum优势: 快速交付价值: Scrum采用迭代开发方法,每个Sprint周期结束时交付一个可用的增量,使团队…

如何在腾讯云上建设网站wordpress分类目录修改

这段代码是一个简单的文件读取和写入的例子。它创建了一个BufferFile类,构造方法接受一个文件名作为参数。BufferFile类中的write方法用于从标准输入读取内容,并将其写入到指定的文件中,直到输入"end"为止。read方法用于读取指定文…

微软Teams Channel Agent上线:中国卖家AI赋能品牌出海新机遇与实战策略(2025前瞻) - 详解

微软Teams Channel Agent上线:中国卖家AI赋能品牌出海新机遇与实战策略(2025前瞻) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

docker制作

安装完docker后,在dockerfile路径下运行:docker build --rm -t flask_app:v1 ./--rm作用:构建过程中自动删除临时创建的中间容器。 说明:Docker 构建镜像时会生成多个中间层容器,--rm 可以避免这些临时容器占用磁…

做好网站如何发布wordpress主题放在

文章目录 一. 训练Keras中的MNIST数据集二. 工作流程1. 构建神经网络2. 准备图像数据3. 训练模型4. 利用模型进行预测5. (新数据上)评估模型精度 本节将首先给出一个神经网络示例,引出如下概念。了解完本节后,可以对神经网络在代码上的实现有一个整体的了…

lvgl 9.3 style使用导致内存泄漏问题

lvgl切换界面的时候发屏内存泄漏的问题, 打开自带的内存占用显示的控件,占用的内存一直变大 使用官方自带的PC模拟器,输出内存使用情况下,确实存在内存占用越来越大的情况 串口输出时free的空间在逐渐变小 异常输出…

【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南 - 详解

【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

洛阳制作网站的公司网站目录遍历

文章目录 Monitorjava对象头Monitor(锁、管程) Monitor java对象头 普通对象 Mark Word 主要用来存储对象自身的运行时数据、klass word就是指向该对象的类型。 数组对象 mark word 不同对象状态下结构和含义不同。 Monitor(锁、管…

king3399 编译报错

king3399 编译报错king3399编译教程 ./build.sh kernel报错信息 ERROR: Running /mnt/d/king3399/linux-5.10/device/rockchip/common/build-hooks/10-kernel.sh - run_command failed! ERROR: exit code 2 from line …

实用指南:uniapp x鸿蒙开发之运行到鸿蒙模拟器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Redis 监听过期Key - 指南

Redis 监听过期Key - 指南2025-09-25 17:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

11_Reactor网络模型

一、Reactor模型基本原理 Reactor模型是一种基于事件驱动的设计模式,特别适合处理高并发的I/O密集型应用。Reactor模型的核心思想很简单,但又很巧妙,它围绕着"事件"展开。不同于传统模型中线程主动等待I/…

花卉网站建设策划方案做的比较好看的网站

一、引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中 1️⃣内部 通过 script 标签包裹 JavaScript 代码&#xff08;一般就写在</script>的…