go 内存管理的变更

在 Linux 环境中,Go 的版本 1.12 - 1.15 由于使用到 Linux 的 MADV_FREE 特性,对内存进行 ”懒释放“ ,造成了 RSS (Resident Set Size,常驻内存集)虚高,容易出 OOM 的错误。可以采用设置 GODEBUG=madvdontneed=1 来解决。到 1.16 后,又改回了原有的 MADV_DONTNEED 。

参考文章如下:

Golang I/O 的限流与计数

这里的限流指,对于某个 I/O 接口,例如 HTTP handler 的 resp.Body,实现一个方法实现限流,比如限制这个接口的传输速度是 5MB/s 。而计数指,对于某个 I/O 接口,例如 io.Reader,实现一个方式实现对其 Read 方法读取数据速率的实时计算,这样子在实现 http get 的时候就可以实时打印下载速度了。

Read More

k8s debug cli 最初版

一次偶然的机会看到了这篇文章 《简化 Pod 故障诊断: kubectl-debug 介绍》,感觉这个实现挺有意思的,准备自己实现一个。这里借鉴了文章中工具的大体设计思路以及获取容器 ID 的方式,其他的大体都是自己思考和实现的,同时,实现的功能比较粗糙,比如诊断容器写死为 busybox、只能进入 exec -it 风格的交互模式等、数据传输过程未加密、执行加入 Pod 中第一个容器的命名空间、容器运行时只能使用 docker 不兼容 containerd 等。

Read More