堆栈跟踪:Stack-Trace

Stack Trace表示堆栈跟踪,这是一个或多个堆栈帧的有序的集合。在程序出现panic的时候你会看到控制台有Stack Trace信息打印出来。 介绍

Go性能分析工具trace介绍

trace 你有没有考虑过,你的goroutines是如何被go的runtime系统调度的?是否尝试理解过为什么在程序中增加了并发,但并没有给它带来更

Pprof实战:解决内存泄露

前言 关于Go的内存泄露有这么一句话不知道你听过没有: 10次内存泄露,有9次是goroutine泄露。 我所解决的问题,也是goroutine泄

Pprof实战:从零开始排查炸弹程序

前言 如果要说在 golang 开发过程进行性能调优,pprof 一定是一个大杀器般的工具。但在网上找到的教程都偏向简略,难寻真的能应用于实战的教程。这也无可

Pprof实战:Profiling Go Programs

背景 在Scala Days 2011,Robert Hundt 发表了一篇名为 Loop Recognition in C++/Java/Go/Scala 的论文。 该论文实现了一种特定的循环查找算法,例如您可以在C++,Go,Jav

Pprof实战:利用火焰图优化代码

这里使用火焰图复现 logger 100% CPU 问题。 先看现象, 用 wrk 压测 logger 1 wrk -t1 -c100 -d30 --script=post.lua 'http://127.0.0.1:4500/marco/log' 查看 CPU 占用情况 采集 30s 的 CPU profile 火焰图 图中红色标记部分 startSink 函数中 runtime.selectgo 消耗了大量 CPU,

Pprof替代库:pkg Profile

简介 Go 运行时的分析接口存在于 runtime/pprof 包中。 runtime/pprof 是一个非常低级的工具,由于历史原因,不同类型 profile 的接口并不统一,而且使用起来还不是太方便,例如:输出数据

pprof实战:利用runtime-pprof优化代码

示例代码 我们写一个程序来计算单词数量: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package main import ( "fmt" "io" "log" "os" "unicode" ) func

Go代码优化建议

将多个小对象合并成一个大的对象 减少不必要的指针间接引用,多使用copy引用 例如使用bytes.Buffer代替*bytes.Buffer`,

pprof实战:结合benchmark优化代码

示例代码:数独 sodoku.go: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

Go性能分析工具pprof介绍

简介 什么是pprof 代码上线前,我们通过压测可以获知系统的性能,例如每秒能处理的请求数,平均响应时间,错误率等指标。这样,我们对自己服务的性

Go如何使用testing包

go test 命令参数 Go 测试工具 go test,包括各种子命令、参数之类的内容。你可以通过 go test -h 查看帮助信息。 其基本形式是: 1 go test [build/test flags] [packages] [build/test flags & test binary flags] 执行 go

Sql模拟库:go-sqlmock

简介 sqlmock是一个实现sql/driver的模拟库。它有一个唯一的目的:在测试中模拟任何sql驱动程序行为,而无需真正的数据库连接。它

打桩框架:gomonkey

介绍 gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发。gomonkey 接口友好,功能强大,目前

猴子补丁:monkey

前言 我们已经知道: 全局变量可通过GoStub框架打桩 过程可通过GoStub框架打桩 函数可通过GoStub框架打桩 interface可通过Go

interface的mock:gomock

序言 GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface的Mock功能,能够与Golang内置的tes

变量与函数打桩:gostub

简介 gostub用于在测试中添加变量,并在测试运行后重置原始值。 这可以用于对静态变量和静态函数进行打桩。要打桩静态变量,请使用stub函数:

测试金字塔实战

前言 “测试金字塔”是一个比喻,它告诉我们要把软件测试按照不同粒度来分组。它也告诉我们每个组应该有多少测试。虽然测试金字塔的概念已经存在了一段