性能调优攻略
关于性能优化这是一个比较大的话题,在《 由12306.cn谈谈网站性能技术 》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。 本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充 。
在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的《 代码优化概要 》,这篇文章基本上告诉你—— 要进行优化,先得找到性能瓶颈 ! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定位和优化无从谈起。
一、系统性能定义
让我们先来说说如何什么是系统性能。这个定义非常关键,如果我们不清楚什么是系统性能,那么我们将无法定位之。我见过很多朋友会觉得这很容易,但是仔细一问,其实他们并没有一个比较系统的方法,所以,在这里我想告诉大家如何系统地来定位性能。 总体来说,系统性能就是两个事:
- Throughput ,吞吐量。也就是每秒钟可以处理的请求数,任务数。
- Latency , 系统延迟。也就是系统在处理一个请求或一个任务时的延迟。
一般来说,一个系统的性能受到这两个条件的约束,缺一不可。比如,我的系统可以顶得住一百万的并发,但是系统的延迟是2分钟以上,那么,这个一百万的负载毫无意义。系统延迟很短,但是吞吐量很低,同样没有意义。所以,一个好的系统的性能测试必然受到这两个条件的同时作用。 有经验的朋友一定知道,这两个东西的一些关系:
- Throughput越大,Latency会越差。 因为请求量过大,系统太繁忙,所以响应速度自然会低。
- Latency越好,能支持的Throughput就会越高。 因为Latency短说明处理速度快,于是就可以处理更多的请求。
二、系统性能测试
经过上述的说明,我们知道要测试系统的性能,需要我们收集系统的Throughput和Latency这两个值。