系统瓶颈定位方法总述
面试官询问如何快速定位系统瓶颈,旨在考察线上调试经验。主要方法包括:
- 压测:在项目上线前找出系统瓶颈并修复。
- 监控工具或链路追踪工具:项目上线后用于实时监控或评测找瓶颈。
- Arthas(原阿尔萨斯):功能强大的线上诊断工具。
压测详情
- 目的:呈现系统性能状况,定位当前及潜在性能瓶颈,通常由测试人员进行。
- 测试计划:明确压测针对的内容,并设定响应时间、QPS、并发数、吞吐量、CPU 利用率、内存使用率、磁盘 I/O、错误率等指标。
- 常用工具:如 load runner 或 Apache 的 jmeter 等
- 后端工程师任务:依据压测结果解决问题或调优,如接口慢就调接口、代码报错就调试错误、并发达不到要求时可能需要加机器等。
上线后监控工具
当压测无问题但项目上线后出现问题时,可使用如 prometheus、grafana 等监控工具,以及 sky walking、zipkin 等链路追踪工具进行监控。
Arthas 工具介绍
- 基本信息:阿里巴巴开源的 Java 诊断工具,深受开发者喜爱。
- 功能
- 定位类从哪个站包加载及相关异常原因,确定某些类的错误。
- 排查代码未执行原因(如分支、git 问题)。
- 实现线上 debug。
- 处理线上用户数据问题。
- 监控系统运行及 dbm 实时状态。
- 生成火焰图。
火焰图解析
- 构成:每列代表一个占用栈,每个格子代表一个函数。纵轴表示栈深度,从下到上排列;横轴采集多个调用栈信息,其宽度代表消耗时间。
- 作用:格子越宽越可能存在瓶颈,有助于排查 CPU 和内存瓶颈。