
调查系统
|
241
换值班和响应团队的成员。编写文档及向其他人阐释系统的过程也有助于反思和回顾对系
统的理解程度。此外,还可以借助红队(参见第
20
章)来测试被忽视的盲点。
5.
复现缺陷
尽量尝试在生产环境外复现错误,这样做主要有两个优点。
•
操作不会影响为实际用户提供服务的系统。这样一来就不用担心操作会使系统崩溃或使
数据被破坏。
•
由于不会暴露任何敏感数据,因此可以让很多人参与调查,不用担心引发数据安全问题。
还可以启用不会影响实际用户数据的操作,以及诸如额外日志记录之类的功能。
有时在生产环境之外做调试行不通。这也许是因为只有到达一定规模的时候才能触发错
误,或无法在隔离环境中触发错误。上述临时文件的案例就属于这样的情况:无法在服务
满载的情况下复现该错误。
6.
隔离问题
如果问题可以复现,下一步就是将问题隔离起来。理想情况是将其缩小到仍能呈现问题的
最小代码子集。可以通过禁用组件或临时注释掉子例程,直至将问题暴露出来。
在之前举的临时文件示例中,一旦发现内存管理在所有服务器上的表现都很奇怪,就不需
要在受影响的机器上逐台调试全部组件。再举一个例子,假设有一台服务器(位于一个大
的系统集群中)突然发生高延迟或错误。该场景是对监控、日志和其他可观察性系统的标
准测试:能否在系统中的众多服务器中快速定位到一台存在问题的服务器?更多信息请参
见
15.1.3
节。
还可以在代码中隔离问题。举一个具体的例子,我们最近对一款内存预算非常有限的程序
内存使用情况做了调查。具体来说,我们检查了线程栈的内存映射。尽管我们的心理预期 ...