golang 内置性能优化工具 go pprof 使用

news/2025/2/7 2:25:02/

1. 使用

import _ "net/http/pprof"func main() {http.ListenAndServe("0.0.0.0:6060", nil) // 启动服务
}

2. 分析

2.1 分析内存

第一步:打开 pprof 控制台

go tool pprof http://127.0.0.1:6060/debug/pprof/heap

第二步:查看占用内存最多的一些函数信息。

然后在控制台输入

top 10

flat: 本函数占用的内存量
flat%: 本函数内存占使用内存总量的百分比
sum%: 前面每一行flat百分比的和
cum: 累计量,main函数调用了函数f,函数f占用的内存量,也会记录进来
cum%: 累计量占总量的百分比

就会列出消耗内存 top 10 的函数方法。比如有一个方法命叫 RoundTrip

第三步

list RoundTrip

这个时候会出现更详细的代码位置

2. 分析 go runtine

第一步:打开 pprof 控制台

go tool pprof http://127.0.0.1:6060/debug/pprof/goroutine

第二步和第三步 和 上边的基本一样。

3. 优化

  1. 发现有内存泄漏,或者过多的内存占用,可以及时释放资源。
  2. 发现有 goruntine 泄漏,或者过多的 goruntine 队列,可以采用 github.com/panjf2000/ants 这个库来节省 goruntine 的开销。

http://www.ppmy.cn/news/11587.html

相关文章

【STM32学习】SysTick定时器(嘀嗒定时器)

SysTick定时器一、参考资料二、时钟源选择与定时时间计算1、时钟源选择2、定时时间计算三、SysTick_Handler中断服务函数一、参考资料 嘀嗒定时器:时钟源、寄存器 二、时钟源选择与定时时间计算 结合正点原子的代码进行说明: 1、时钟源选择 从上图可以发…

什么是SPI?SPI的优点有哪些?

1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写,是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工、同步的通信总线。 2、SPI优点 支持全双工通信通信简单数据传输速率块 3、缺…

格式化时间转化为时间戳

const std::string date("2022-12-12 00:00:00"); std::regex reg("(\\d)-(\\d)-(\\d)(\\s)(\\d):(\\d):(\\d)"); std::smatch match; std::regex_search(date,match,reg); std::string tm_y(match[1]);// 年 std::string tm_m(match[2]);//月 std::s…

结构体重点知识大盘点

0、结构体基础知识 1、结构体是一些值的集合,这些值被称为成员,它们的类型是可以不同的。(与数组相似,但数组元素的类型都是相同的)。用来描述由基本数据类型组成的复杂类型。 2、结构体也有全局的和局部的。 3、st…

快速了解Docker

目录 什么是Docker 项目部署的问题 Docker解决依赖兼容问题 Docker解决操作系统环境差异 再梳理 Docker和虚拟机的差别 Docker架构 镜像和容器 DockerHub Docker架构 再梳理 什么是Docker 项目部署的问题 大型项目组件较多,运行环境也较为复杂,部署时会…

访问学者在美国访学衣食住行的小妙招

美国访学过程中,衣食住行是我们必须考虑的因素,现在51访学网小编就这四个方面来讲一讲美国访学衣食住行的小妙招。 一、美国留学生活之“住” 租房信息可以在各校的Chinese Mailing list 或者其他类似的电子新闻组上(UC的可以在&#xff09…

【链表】leetcode面试题 02.07. 链表相交(C/C++/Java/Js)

leetcode面试题 02.07. 链表相交1 题目2 思路2.1 思路一2.2 思路二(强推--5行代码)3 代码3.1 C版本3.1.1思路一:3.1.2 思路二3.2 C版本3.2.1 思路一3.2.2 思路二3.3 Java版本3.3.1 思路一3.3.2 思路二3.4 JavaScript版本4 总结1 题目 给你两个单链表的头…

拾遗增补(六)——线程组内处理异常

创建名称为7.6项目。   创建MyThread.java类代码如下: public class MyThread extends Thread{private String num;public MyThread(ThreadGroup group, String name, String num) {super(group, name);this.num num;}Overridepublic void run() {int numInt I…