首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》6.1 性能术语

关灯直达底部

为了让你充分理解本章所讨论的内容,我们会给出正规的性能概念定义。下面是性能工程师词典里最重要的一些术语:

  • 等待时间(Latency)
  • 吞吐量(Throughput)
  • 利用率(Utilization)
  • 效率(Efficiency)
  • 容量(Capacity)
  • 扩展性(Scalability)
  • 退化(Degradation)

Doug Lea讨论这些术语时都是放在多线程代码的上下文中,但我们要考虑的范围更广:从一个多线程处理器到整个集群服务器平台。

6.1.1 等待时间

等待时间是在给定工作量下处理一个任务单元所消耗的时长。通常,都是在工作量“正常”的情况下提到等待时间的。但有价值的性能评测一般都是用一张图形来显示在工作量不断增加的情况下等待时间随之改变的函数关系。

图6-1显示了在工作量增加时,某一性能指标(比如等待时间)出现了一个突发的非线性退化。这通常被称为性能肘。

图6-1 性能肘

6.1.2 吞吐量

吞吐量是系统在限定资源、限定时长内能完成的单位工作量。用的最多的是在某一参考平台(比如指明了硬件配置、操作系统和软件环境的特定品牌服务器)上的每秒事务处理数。

6.1.3 利用率

利用率表示可用资源中用来处理工作单元(而不是清理任务或处于空闲状态)的资源百分比。人们通常会说服务器的利用率是10%,这其实是说在正常处理时间内处理工作单元的CPU百分比。注意,不同资源的利用率水平可能有非常大的差异,比如CPU和内存之间。

6.1.4 效率

系统的效率等于吞吐量除以所用资源。一个用更多资源产生相同吞吐量的系统效率更差。

比如比较两个集群方案。如果为了达到相同的吞吐量,方案A需要的服务器数量是方案B的两倍,则方案A的效率是B的一半。

别忘了,资源也可以用成本来衡量——如果方案X的成本是方案Y的两倍或需要两倍的员工运行生产环境,则方案X的效率是Y的一半。

6.1.5 容量

容量是任一时刻能通过系统的工作单元(比如事务)数量。也就是在特定的等待时间或吞吐量下,能够得到同步处理的工作单元数量。

6.1.6 扩展性

当系统得到更多资源时,它的吞吐量或等待时间会发生变化。这种发生在吞吐量或等待时间上的变化就是系统的扩展性。

如果方案A可用的服务器数量翻倍,它的吞吐量也能翻倍,那我们就说它实现了完美的线性扩展。在大多数情况下,完美的线性扩展很难达到。

还应该注意,系统的扩展性取决于很多因素,而且这种扩展性还是变化的。系统能以线性方式向上扩展到某一点,然后开始退化。这是另外一种性能肘。

6.1.7 退化

如果在不增加资源的情况下增加工作单元或网络系统的客户端,一般等待时间或吞吐量都会发生变化。这是系统在负载增加时出现的退化。

正面退化与负面退化

在正常情况下,退化是负面的。也就是说给系统增加工作单元会对性能产生负面影响,比如导致处理等待时间变长。但某些情况下退化也有可能是正面的。

比如说,如果过重的负载导致系统某些部分超过了阈值,迫使系统切换到高性能模式,这会让系统工作效率更高,缩短处理时间,尽管还要完成更多工作。JVM是个动态性非常强的运行时系统,并且有几部分可以达成这种效果。

前面这些术语是最常用的性能指标,当然还有其他一些重要的指标,但这些是指导系统性能调优的基本统计数据。在下一节中,我们会给出一个以密切关注这些数值为基础,并尽可能定量的性能调优方法。