浅谈pprof

搜狗商业技术团队

对于大多数 Gopher 而言,一般平时最主要的工作内容除了实现各种无聊的业务逻辑之外,剩下的就是解决各种琐碎的问题。比如:查询性能瓶颈在哪里?查询内存泄漏在哪里?好在 pprof 是处理此类问题的利器,共有两套标准库,分别适用于不同的场景:

命令行工具「go test」就包含了 runtime/pprof,相关参数请参考「go help testflag」:

shell> go test -cpuprofile cpu.out -memprofile mem.out -bench .

不过和 runtime/pprof 相比,更常用的是 net/http/pprof,接下来我们主要通过它来解决一些常见问题,想要激活 net/http/pprof 的话很简单,只要导入对应的包并启动服务即可:

import _ "net/http/pprof"

func main() {
	_ = http.ListenAndServe("localhost:6060", nil)
}

需要注意的是,千万别让外网访问到 pprof,否则可能会导致出现安全问题。有兴趣的读者可以尝试通过 google 搜索「intitle:/debug/pprof/ inurl:/debug/pprof/」看看反面例子。

Golang 函数和 C 函数深度对比

搜狗商业技术团队
Golang原理 阅读量

无论是什么语言,函数都是最常被使用到的东西。

我们对比一下 Golang 和 C 这两种语言的函数实现,进而我们能真正理解以下两个问题。

  • 为什么 C 语言只能有一个返回值,而 Golang 中可以返回多个?
  • Golang 函数调用在性能上和 C 比有何差异?

你真的理解容器吗?

搜狗商业技术团队
架构技术 阅读量

提到“容器”,大家应该都不陌生,不是什么特别新鲜的技术了,受众也越来越广了,但是会用就真的理解吗?以下几个相关问题你真的能做到了然于胸吗?

  1. “容器”是怎么把自己隔离开的呐?
  2. “容器”能使用宿主机的全部资源吗?
  3. “容器”有自己的文件系统吗?
  4. “容器”与虚拟机有什么区别?