我追着 Redis 超时查了一圈,最后是 1200 万 field 的 Hash 卡住了实例
我追着 Redis 超时查了一圈,最后是 1200 万 field 的 Hash 卡住了实例
接口开始一批批变慢,Redis 超时告警也跟着冒出来。
这种时候,人很容易把锅先扣给连接池:连接是不是借不出来了,应用是不是堆了一堆等待 …
接口开始一批批变慢,Redis 超时告警也跟着冒出来。
这种时候,人很容易把锅先扣给连接池:连接是不是借不出来了,应用是不是堆了一堆等待 …
线上报 connection pool exhausted,我见过不少人的第一反应是把 max_open 调大。
从 20 调到 100,报警没了,接口也稳了。看起来问题解决了。
直到另一个服务把它调到 200,还是超时;DBA 又在群里说 …
线上有一张设备状态表,用 sync.Map 存着。
读很多,写很少。平时接口很稳,一到定时刷新那几秒,读 p99 就会抖一下。你看代码,第一反应可能不是怀疑 sync.Map,而是怀疑刷新逻辑:是不是批量太大?是不是网络抖了?是不是 GC …
接口 p99 突然抖起来,pprof 里 mutex wait 很显眼。
会议上最容易出现的三个动作是:锁太粗,换成 RWMutex;分配太多,把 buffer 放进 sync.Pool;再不行,把临界区附近的代码拆一拆。
听起来都像优化。 …
上篇讲完 GOGC、GOMEMLIMIT 和 STW,很多人真正卡住的地方才刚开始。
不是“不知道这些参数是什么”,而是线上真的出问题时,不知道下一步该干什么。
服务 p99 每隔几十秒抖一下,GC CPU 看起来有 5%。有人说把 …
服务 p99 每隔几十秒抖一下。
监控里 GC CPU 大概 5%,不算离谱,但曲线很准:GC 一来,延迟就往上冒。群里很快有人提议,把 GOGC 从 100 调到 200,先让 GC 少跑几次。
这个动作看起来很合理。
CPU 下来了 …
服务内存从 800MB 慢慢涨到 2.6GB。
曲线不陡,不像雪崩。它只是每天往上爬一点,重启以后掉下来,过几天又回到老地方。告警一响,群里很快会出现两个动作:先怀疑泄漏,再问 GOGC 要不要调。
这两个反应都不离谱,但都太早。
在 Go …
你读过的很多 Go map 文章,可能已经过时了。
它们还在讲 hmap、bmap、overflow bucket、load factor 6.5,还会画一张 bucket 后面挂着 overflow bucket 的图。那些内容不是没有价 …
服务又被 OOMKilled 了。
Pod 刚重启,群里已经有人开始翻 GC 日志。有人说 GC CPU 到了 20%,有人说把 GOGC 调低一点,还有人建议直接上 GOMEMLIMIT。
这些动作不一定错,但顺序错了。 …
服务 p99 每隔几十秒抖一下。
监控里 GC CPU 大概 5%,不算夸张,但曲线很准:GC 一来,延迟就往上冒。群里很快有人提议:把 GOGC 从 100 调到 200,先让 GC 少跑几次。
这个动作看起来很合理。
CPU 下来了 …
服务内存从 800MB 慢慢涨到 2.6GB。
曲线不陡,不像雪崩。它只是每天往上爬一点,重启以后掉下来,过几天又回到老地方。告警响了,群里第一句话通常是:是不是内存泄漏?
这个判断不算错,但太急。
在 Go 服务里,内存持续上涨可能是真泄 …
凌晨两点,线上服务突然变慢。
你登上服务器,top 一看:CPU 占用 30%,内存也没满,磁盘 IO 正常。但请求就是卡,P99 从 50ms 跳到 800ms。
第一反应:加机器?
先别急。系统给你的信号不是"资源不够 …
| |
问你一个问题:这个 x 是在堆上还是在栈上?
如果你答"栈上",你错了——至少在这段 …
很多人觉得 Redis 没什么门槛。
命令不难,接入也快,压测时还总能打出很漂亮的数字。于是项目上线后,大家默认它“应该不会出事”。
但我看过不少 Redis 问题,最后都不是 Redis 自己不行,而是前面的设计太随便:Key 怎么拆 …
2024年对于前端开发者来说是一个充满机遇的年份。随着Web技术的快速发展,新的框架、工具和最佳实践不断涌现。本文将深入分析今年前端开发的主要趋势,帮助开发者把握技术发展方向。