Go诊断工具

news2025/2/22 10:25:16

        Go 提供了一些出色的诊断工具,可帮助我们深入了解应用程序的执行情况。

1. 分析工具

        分析工具可观测应用程序执行的各种指标。它使我们能够解决性能问题、检测争用、定位内存泄漏等。这些指标可以通过以下几个配置文件收集:

  • CPU--确定应用程序将时间花在了哪里
  • Goroutine--报告正在进行的 goroutine 的栈跟踪
  • Heap--报告堆内存分配以监控当前内存使用情况,并检查可能的内存泄露
  • Mutex--报告锁争用,以查看代码中使用的互斥锁的行为,以及应用程序是否在锁定调用上花费了太多时间
  • Block--显示 goroutine 阻塞等待同步原语的位置。

        在 Go 中,有一款分析工具名为 pprof 。首先,让我们了解如何以及何时启用 pprof; 然后,我们讨论最关键的配置文件类型。

启用 pprof 

        有几种方法可以启用 pprof 。例如,我们可以使用 net/http/pprof 包通过 HTTP提供分析数据:

package main
 
import (
    "fmt"
    "log"
    "net/http"
    _ "net/http/pprof"
)
 
func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "")
    })
    log.Fatal(http.ListenAndServe(":80", nil))
}

导入 net/http/pprof 会产生副作用,使我们能够访问 pprof URL, http://host/debug/pprof。请注意,即使在生产环境中启用 pprof 也是安全的。影响性能的配置,如 CPU 分析,默认情况下不启用,也不会连续运行,它们仅在特定时间段内被激活。

现在我们已经了解了如何暴露 pprof 服务端,让我们讨论最常见的配置。

        CPU 分析

        CPU分析依赖于操作系统和信号。当它被激活时,应用程序默认通过 SIGPROF 信号要求操作系统每 10 ms 中断一次。当应用程序收到 SIGPROF 信号时,它会暂停当前活动并将执行转移到分析工具。分析工具收集诸如当前 goroutine 活动之类的数据,并汇总我们可以检索的执行统计信息。然后分析工具停止,应用程序继续执行直到下一个 SIGPROF 。

我们可以通过访问 /debug/pprof/profile 端点来激活 CPU 分析。默认情况下,访问此端点会执行 30 s 的 CPU 分析。在 30 s内,应用程序每 10 ms 中断一次。 请注意, 我们可以更改这两个默认值:可以使用 second 参数向端点传递分析应该持续多长时间(例如,/debug/pprof/profile?seconds=15),还可以更改中断速率 (甚至小于 10 ms)。但在大多数情况下,10 ms 应该足够了,在减小这个值 (意味着增加速率) 时,应该注意不要损害性能。 30 s 后,我们可下载 CPU 分析的结果。

        从这个文件中,我们可以使用 go tool 浏览到分析结果:

$ go tool pprof -http=:8080 <file>

此命令会打开一个显示调用图的 Web UI。下图显示了一个应用程序的例子。箭头越大,它越是热门路径。然后我们可以浏览到这张图表并获得执行参数。

        下图告诉我们,在 30s 内, decode 方法

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

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

相关文章

盲人出行安全保障措施:科技赋能,赋予视障群体独立出行新可能

在社会的各个角落&#xff0c;我们常常能看到盲人朋友们坚韧而乐观地面对生活的挑战。然而&#xff0c;尽管他们内心充满力量&#xff0c;但日常出行中的种种困难却始终如影随形。如何有效提升盲人出行安全保障措施&#xff0c;让他们能更自由、更自信地融入社会生活&#xff0…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库 一、新建仓库 新建仓库教程 注意&#xff1a;远程仓库的初始文件不要与本地存在名字一样的文件&#xff0c;不然拉取会因为冲突而失败。可以把远程一样的初始文件删…

sql篇-内连接-左连接-右连接

内连接&#xff1a;表1 inner join 表2 on 条件 inner join join&#xff08;简写&#xff09; 查找&#xff1a;满足 匹配两个表条件的记录&#xff1a;student.s_id s.s_id(不匹配的记录不筛选) select * from student inner join score s on student.s_id s.s_id; 查询…

STM32 HAL库 利用CH376进行USB文件读写

STM32 其实可以进行读取USB文件,但仅限于F4以上芯片才可以进行SUB文件读写,但在项目开发中,往往用不到此芯片,那么只能通过外挂的USB芯片进行USB文件读写,本文则是采用STM32F103的SPI与CH376进行通信,通过CH376操作指令进行操作。 1、CH376介绍 CH376芯片 是沁恒的一款文…

聊聊应用商城评分4.9的Apipost IDEA插件

Apipost Helper&#xff0c;作为IDEA插件&#xff0c;可以快速生成和查询API文档&#xff0c;直观友好地在IDE中调试接口。它简化了开发流程并提升效率&#xff0c;即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能&#xff0c;如通过代码查找接口或者通过接口查找代…

【网络】Burpsuite学习笔记

文章目录 1.介绍1.1 正常客户端与服务端通信&BurpSuite代理后1.2 下载激活参考地址1.3 代理设置1.4 Proxy SwitchyOmega 使用1.4.1 新建情景模式1.4.2 设置代理1.4.2 应用选项 1.5 FoxyProxy 使用1.6 安装证书1.6.1 方式一1.6.2 方式二1.6.3 浏览器安装证书1.6.4 或者直接双…

【Linux】引导过程与服务控制

目录 一、Linux操作系统引导过程 1.linux开机引导过程 2.系统初始化进程 1.init进程 2.进程启动方式 二、运行级别和Systemd单元类型 1.运行级别 2.Systemd 三、启动类故障恢复 1.修复MBR扇区故障 2.修复GRUB引导故障 3.root密码忘记的修改方式 四、系统服务控制 …

如何提取音频中的封面

大家在播放MP3音乐的时候经常可以在播放器上看到这个音乐的封面&#xff0c;那么我们要如何提取MP3的音乐里面的封面呢&#xff1f; 打开智游剪辑&#xff08;官网: zyjj.cc&#xff09;&#xff0c;搜索音乐封面提取 然后就只需要拖入MP3文件点击提交就可以了 下面这里简单展示…

StarRocks三节点集群部署

系统&#xff1a;Centos7 X86-64 3台服务器部署3个BE服务和3个FE服务&#xff0c;生产环境建议FE节点部署在单独服务器 服务器 服务 192.168.0.221 BE、FE、jdk、Nginx 192.168.0.222 BE、FE、jdk 192.168.0.223 BE、FE、jdk 1. 配置系统参数 a. 编辑/etc/security/…

elementui 弹窗展示自动校验表单项bug

表单校验失败一次之后&#xff0c;再次弹出表单&#xff0c;触发自动校验 解决方案&#xff1a; clearValidate() 方法清空表单校验项 this.$nextTick(() > {this.$refs[checkForm].clearValidate() }) 使用nextTick规避报错

Flask Web框架的使用(合集)

Flask Web框架的使用-静态文件和模版 一、前言二、引言三、Web 框架简介1.什么是Web框架2.常用的 Web 框架FlaskDjangoBottleTornado 四、Flask Web框架的使用1.安装虚拟环境安装Virtualen创建虚拟环境激活虚拟环境 2.安装Flask3.第一个Flask 程序4.开启调试模式5.路由变量规则…

书生·浦语大模型全链路开源体系-第4课

书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…

【Python基础】MySQL

文章目录 [toc]创建数据库创建数据表数据插入数据查询数据更新 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 学习指南&#xff1a;Python学习指南 创建数据库 import pymysqldef create_database():db pymysql.connect(hostlocalhost, userroot, passwordr…

Nginx第2篇-HTTPS配置教程

背景 我最近做个项目要上线&#xff0c;接口部署到服务器&#xff0c;总不能给别人个ip地址加端口吧&#xff0c;而且小程序上线要有接口不能是ip和http协议&#xff0c;必须是https协议。这里记录下使用Nginx配置HTTPS的过程&#xff0c;主要包含以下三部分。 申请域名SSL证…

IDEA plugins 好用的插件集

IDEA plugins RestfulToolkit 1. 安装插件 File–>Settings --> plugins --> RestfulToolkit 2.插件有点&#xff1a; 2.1、帮助把项目中的 RestURL 按照项目汇总出来&#xff0c;找到对应URL直接在IDEA上面进行请求测试。 2.2、开发Java Web页面项目&#xff0c;经…

SpringCloud系列(3)--SpringCloud新建父工程

1、新建项目 2、填写项目名称和工作组名称 3、选择构建项目的Maven版本 4、查看项目编码&#xff0c;若不是UTF-8&#xff0c;需要设置为UTF-8 5、启用注解处理 6、选择项目的编译版本为JDK8 7、查看项目结构&#xff0c;若JDK版本不是8&#xff0c;则给它设置为8 8、删掉父工程…

全国产化无风扇嵌入式车载电脑在车队管理嵌入式车载行业应用

车队管理嵌入式车载行业应用 车队管理方案能有效解决车辆繁多管理困难问题&#xff0c;配合调度系统让命令更加精确有效执行。实时监控车辆状况、行驶路线和位置&#xff0c;指导驾驶员安全有序行驶&#xff0c;有效降低保险成本、事故概率以及轮胎和零部件的磨损与损坏。 方…

短视频矩阵系统----技术源头开发

短视频矩阵系统--- 1. 确定账号类型和目标受众 2. 准备账号资料 3. 搭建系统框架 4. 开发核心功能 5. 测试和调试 6. 部署和维护 7. 推广和运营 在开发短视频账号矩阵系统源码时&#xff0c;可以使用一些开源框架和工具来提高开发效率和降低开发难度。同时&#xff0c;需要组…

pajamas 1 daydream.sequence-template

0. 老实交代&#xff0c;最近对于python&#xff0c;非常之感冒 热天气常驻之后&#xff0c;各种毛病就来了&#xff1a;蚊子很彪悍&#xff0c;牙齿不舒服&#xff0c;肠胃那更是一坨 … 虽然不久前&#xff0c;荷包大残&#xff0c;但是关注到 mac mini 之后&#xff0c;就…

Java面试八股之Iterator和ListIterator的区别是什么

Iterator和ListIterator的区别是什么 这道题也是考查我们对迭代器相关的接口的了解程度&#xff0c;从代码中我们可以看出后者是前者的子接口&#xff0c;在此基础上做了一些增强&#xff0c;并且只用于List集合类型。 定义与基本概念 Iterator&#xff1a; 定义&#xff1a…