lprof通过bytecode的静态分析,从runtime logs里面infers the request-flow来实现zero-instrumentation的性能监测
lprof输出一个数据库表,这个表可以用来分析系统的性能行为,每个请求对应其中的一行,包括
- 请求的类型
- 请求的开始和结束时间戳
- 请求穿越的节点列表以及每个节点的开始和结束时间戳
- 处理请求时调用的主要方法列表。
文章基于三个observation
- 现有的分析和调试分布式系统性能的工具是有限的
- 性能分析和调试通常优先级比较低,这使得拥有一个合适的、易于使用的工具变得更加重要(就是相比于error来说,不被重视)
- 实现互联网服务的分布式系统在正常执行过程中往往会输出大量富含有用信息的日志状态
从日志中提取每个请求的性能信息并非易事。挑战包括
- 日志输出信息通常由非结构化的自由格式文本组成
- 日志分布在系统的各个节点上,每个节点都包含循环产生的输出
- 来自多个请求和线程的日志输出信息在每个日志文件中交织在一起
- 日志文件的大小很大
lprof的设计有以下特点
- Non-intrusive
- In-situ and scalable analysis
- Compact representation allowing historical analysis
- Loss-tolerant
设计。 lprof首先使用静态分析从代码中收集信息,以帮助将每个日志消息映射到特定请求的处理上,并帮助建立一个映射到请求的日志消息的顺序。 在第二阶段,lprof使用从静态分析阶段获得的信息来处理日志;它以MapReduce作业的形式进行。
具体的日志分析没有仔细看。