Go map 竟然也会发生内存泄漏?

Go 程序运行时,有些场景下会导致进程进入某个“高点”,然后就再也下不来了。 比如,多年前曹大写过的一篇文章讲过,在做活动时线上涌入的大流量把 goroutine 数抬升了不少,流量恢复之后 goroutine 数也没降下来,导致 GC 的压力升高,总体的 CPU 消耗也较平时上升了 2 个点左右。 有一个 issue 讨论为什么 allgs(runtime……

阅读全文

你说的下游是 upstream 吧?

工作中,有一些术语比较容易混淆,聊半天,最后发现双方对术语的理解不一致。这个时候用英文原本的表达或者换一种方式来表述能让沟通更顺畅。 像我们经常说的『上下游』便是经常发生混淆的一对名词。 以前,我经常说『梳理一下我们依赖的下游』,后来发现这种说法是错误的。正确的是:梳理一下我们依赖的……

阅读全文

将博客迁移到了 Cloudflare Pages

上个月把博客从 hexo 迁移到了 hugo,博客数据、发布流程全部托管到 github。之后把之前写的一篇《那些年曹大写的文章》搬了过来,其他文章暂时下线了。 上周在折腾博客 css 的时候,aofei 说不如迁移到 Cloudflare,还能全球 cdn 加速。于是又动手迁移到 Cloudflare Pages,顺便又修改了一些 cs……

阅读全文

那些年曹大写的文章

某天晚上看到曹大在群里指点江山,折服。感叹为何曹大如此渊博,遂决定从头到尾研读完他所有的博文。 前后共花了一个月的时间,今天终于读完了(2020-11-24~2020-12-26),总共 118 篇。从 15 年 10 月 31 日开始的第一篇,到今天,总共写了 5 年多的时间。基本上每半个月产出一篇,非常稳定……

阅读全文

最重要的是内容

最近,看曹大依然在坚持固定频率发新的文章,非常佩服。今年是我写博客的第四年,因为各种原因,上半年基本没有发表新东西,非常惭愧。养成一个好习惯很难,破坏却很容易。 这次将博客改用 hugo 搭建。最早 qcrao.com 是用 hexo 在 mac 渲染,然后将 public 推到 github 上的 qcrao.github.io。坏外是需要在 mac 上安装一堆前……

阅读全文

写 Go 时如何优雅地查文档

某天写代码时发现自己对 IDE 的依赖非常深,如果没了 Goland 就不会写代码了,心里为之一惊。 Goland 的自动补全功能已经是必需品了,只要打出相关的几个字符,不管是变量名还是函数调用,都能帮你直接补全。我们只需要往相应的位置填东西就行了。 进而又想到,当补全功能缺失或者暂时失灵的情况下,该如何快速地查出某……

阅读全文

曹大带我学 Go(11)—— 从 map 的 extra 字段谈起

熟悉 map 结构体的读者应该知道,hmap 由很多 bmap(bucket) 构成,每个 bmap 都保存了 8 个 key/value 对: 有时落在同一个 bmap 中的 key/value 太多了,超过了 8 个,就会由溢出 bmap 来承接,即 overflow bmap(后面我们叫它 bucket)。溢出的 bucket 和原来的 bucket 形成一个“拉链”。 对于这些 overflow 的 bucket,在 hmap 结构体和 bmap 结构……

阅读全文

曹大带我学 Go(10)—— 如何给 Go 提性能优化的 pr

之前写了一篇《成为 Go Contributor》 的文章,讲了如何给 Go 提一个 typo 的 pr,以此熟悉整个流程。当然,离真正的 Contributor 还差得远。 开课前曹大在 Go 夜读上讲了他给 Go 提的一个关于 tls 的性能优化,课上又细讲了下,本文就带大家来学习下他优化了啥以及如何看优化效果。 第一次提的 pr 在这里,之后又挪到了一……

阅读全文

曹大带我学 Go(9)—— 开始积累自己的工具库

不知道你有没有这样的经验:看了很多计算机相关的书,觉得自己懂得很多,但是一遇到实际问题,就不会解。 再看身边的老司机,执行几行命令,看了几个指标,就准确地定位问题了。他可能也没看那么多理论,但实战能力确实强,心里一下子就失衡了。 这其中有很多原因,我认为其中有一个比较重要的就是:工具……

阅读全文

曹大带我学 Go(8)—— 一个 metrics 打点引发的事故

最近线上事故频发,搞得焦头烂额,但是能用上跟曹大学的知识并定位出了问题,还是值得高兴一把的。毕竟“打破砂锅问到底”,“定位出根因”一直是技术人的优良品质。 虽然我们总是逃不过事故驱动开发的魔咒,但吃一堑长一智,看别人的事故,学到的是自己的能力。 现象 一个平凡的午高峰,服务在全量上线的……

阅读全文