知识卡片
"什么/哪里/为什么"三问定位资源消耗
内容
一个异常运行的系统通常仍在执行某种操作,只是不是你期望它做的操作——可连续追问:”什么”、 为”什么”、资源消耗在”哪里”。案例中一个 Spanner 任务 CPU 被占满,先问”为什么”定位到在给日志 排序,再连续两次追问”哪里”,逐层收窄到某段正则表达式的计算,最终定位为该正则使用了低效的 回溯算法。发散:每一层都用上一层答案收窄下一层搜索范围,不宜跳过中间层直接问”为什么”。
参考来源
- 位置:《SRE:Google运维解密》第12章《有效的故障排查手段》""什么""哪里"和"为什么""一节(源文件:_epub-src/OEBPS/Text/0009_0003.xhtml)
- 结论依据:原文给出完整案例——"为什么:Spanner 服务器的任务实例把CPU占满了……哪里:Spanner服务器的CPU消耗在了哪里?……正在将日志记录排序……哪里:这段排序代码中的哪部分在消耗资源?是在一段正则表达式的计算过程中",最终给出"重写该正则表达式,避免使用回溯"的解决方案,逐层验证了三问定位法。
- 原始内容:为什么:Spanner 服务器的任务实例把CPU占满了,无法处理用户发来的请求。哪里:Spanner服务器的CPU消耗在了哪里?通过采样(profiling)得知该任务正在将日志记录排序,写入磁盘。哪里:这段排序代码中的哪部分在消耗资源?是在一段正则表达式的计算过程中。