Xargin

If you don't keep moving, you'll quickly fall behind

极端情况下收缩 Go 的线程数

在 Go 的 runtime 里有一些创建了就没法回收的东西。 之前在 这篇 [http://xargin.com/cpu-idle-cannot-recover-after-peak-load/] 里讲过 allgs 没法回收的问题。 除了 allgs 之外,当前 Go 创建的线程也是没法退出的,比如这个来自 xiaorui.cc 的例子,我简单做了个修改,能从网页看到线程: package main /* #include #include #include void output(

在 Go 语言中 Patch 非导出函数

TLDR; 使用 https://github.com/cch123/supermonkey 可以 patch 任意导出/非导出函数。 Update: 目前在 Linux 直接运行 go test 生成的二进制文件没有符号表,所以如果在 test 中使用需要先用 go test -c 生成带符号表的二进制文件,然后再运行,略麻烦。 目前在 Go 语言里写测试还是比较麻烦的。 除了传统的 test double

无人值守的自动 dump(一)

Go 项目做的比较大(主要说代码多,参与人多)之后,可能会遇到类似下面这样的问题: * 程序老是半夜崩,崩了以后就重启了,我也醒不来,现场早就丢了,不知道怎么定位 * 这压测开压之后,随机出问题,可能两小时,也可能五小时以后才出问题,这我蹲点蹲出痔疮都不一定能等到崩溃的那个时间点啊 * 有些级联失败,最后留下现场并不能帮助我们准确地判断问题的根因,我们需要出问题时第一时间的现场 Go 内置的 pprof 虽然是问题定位的神器,但是没有办法让你恰好在出问题的那个时间点,把相应的现场保存下来进行分析。特别是一些随机出现的内存泄露、CPU 抖动,等你发现有泄露的时候,可能程序已经 OOM 被 kill

Go context

填坑。。 https://github.com/cch123/golang-notes/blob/master/context.md ascii 图太多,blog 上没法看。就这样

一些连接池相关的总结

http 标准库 服务端 请求处理 package main import ( "io" "log" "net/http" ) func sayhello(wr http.ResponseWriter, r *http.Request) { wr.Header()["Content-Type"] = []string{"application/json"} io.WriteString(wr, "hello") } func main() { http.HandleFunc(