不是专职做压力测试这行当的,只能是以自己的经验来以外行人的眼光来说说压力测试,压力测试并不仅仅是个压力测试的过程,而是一个相当系统和复杂的工程,我认为压力测试是为了让系统达到所期望的运行效果以及承受所期望的压力,这也就要求压力测试应该帮助性能调优团队,为其提供一定程度的指导,在这里我不将压力测试和性能调优分的那么清楚了,在我看来,压力测试过程包括了:明确压力测试的目标、制定压力测试方案、进行压力测试、分析压力测试结果、寻找瓶颈并进行调优以达到目标,在这篇blog中来细看下这几个过程以及常用的方法。
明确压力测试的目标
通常来说(注意是通常),压力测试的目标有这么几点:
1、评测系统是否满足压力支撑的要求
要评测系统是否满足压力支撑的要求,同样要做的就是需要明确定义系统需要支撑多大的压力,例如:
机器的配置:CPU、内存、硬盘、etc.
网络条件:100M
操作系统:Linux core: 2.6
当并发数为10用户时,系统应能在20ms内响应完毕(这个时候的TPS为500),系统的load需在2以下;当并发数为100用户时,系统应能在50ms内响应完毕(这个时候的TPS为2000),系统的load需在4以下;当并发数为200用户时,系统应能在80ms内响应完毕(这个时候的TPS为2500),允许其中有千分之一的出错率,系统的load需在6以下,在压力测试的过程中,只要其中的任何指标未达到,均可判定系统尚未达到压力的目标。
实际的压力测试的这个指标会比我这里举的例子复杂很多,例如还需要考虑网络流量、内存消耗、IOPS、连接数等等。
这里面压力测试隐藏的目标是为容量规划提供一定的指导,例如目前的系统在某种配置的情况下单台机器能承受的最大并发数为100用户,那么如果系统的高峰压力是1000的话,如果系统支撑无损水平扩展的话就意味着需要10台这类配置的机器,这一步同样是经过测试的。
2、预估系统上线运行的状况
毕竟通常压力测试环境和线上的环境是会有很大的不同的,压力、数据量、硬件环境等,基本上只能是根据线下的环境的情况进行一定比例的对比后计算来预估,这里面很重要的是要预估系统上线后正常情况下的表现状况、一定的增长比率后的运行状况以及风险点(例如当并发用户数增长到多少时、系统load到多少时可能会出现问题)。
这一个目标我觉得非常难达到,但随着经验,我相信是可以做到的,如果能做到这种效果的话是会有很大的帮助的。
以上这个两个目标基本是压力测试都要达到或希望达到的,而具体有可能会因为系统的业务的具体情况会制定其他不同的目标。
制定压力测试方案
这步是压力测试整个过程中最难的步骤之一,为了能够测试出系统是否符合压力支撑的要求以及评估上线的表现,通常我们会希望搭建出和生产环境完全相同的环境,但这就是最麻烦的一点了,基本上是不太可能的,因此通常能采取的方法会是:
1、做等比例的缩放