Detecting Transient Bottlenecks in n-Tier Applications through Fine-Grained Analysis

论文主要是解决一些transient事件(比如JVM garbage collection)带来的bottleneck。个人认为贡献在于提出了一个新的指标:并发/吞吐。

本文的第一个贡献是一种新颖的瞬态瓶颈检测方法,具体来说,使用passive network packet tracing,监控arrival和departure的时间。

第二个贡献是研究了一些transient事件。

background and motivation

使用Fujitsu SysViz来监控the trace of transaction executions。 SysViz能够根据通过网络窃听器或支持被动网络追踪的网络交换机收集的交互信息(奇数箭头)重建系统中执行的每个事务的整个轨迹。这是一个黑盒tracing方案。

FINE-GRAINED LOAD/THROUGHPUT ANALYSIS

由于N层系统中的瓶颈是系统中请求开始拥挤的地方,所以检测瞬时瓶颈的一个关键点是找到经常出现短期拥堵的组件服务器。

  • 方法的第一步是在连续的细粒度时间间隔内测量服务器的负载和吞吐量
    • 将服务器负载定义为一个时间间隔内的平均并发请求数
    • 吞吐并不能用pps来衡量:因为有mixed的流量
      • 用work unit的个数来作为吞吐
      • work unit是service time的最大公因子
      • 每类请求的服务时间(service time)近似值是通过被动网络追踪得到的
  • 为了诊断服务器在哪个时间段出现短期拥堵,我们需要将服务器的负载和吞吐量联系起来。拥堵点N是服务器开始拥堵的最小负荷
    • throughput/load的这个斜率假设变化了,认为发生拥塞
    • 这个throughput/load是采样结果,采样时间就很有关系了。这个文章里是硬选的。
  • 一旦确定了拥堵点,我们就可以根据测量的负载来判断MySQL层在哪个时间间隔内出现拥堵

EVALUATION

给了两个例子,一个是因为JVM的GC导致的拥塞,另一个是因为intel的电源管理。但是没太看懂。