在一个网站应用系统的完整生命周期中,上线之前还有漫长的开发和测试阶段。作为系统未来的管理者和负责人,运维人员有必要在这个阶段就参与进来,根据业务的预期,完成系统层面的容量和压力测试,根据测试数据做出切实的运维规划,包括采购清单、结构设计、预警阈值和应急预案等。
可以说,监控,是防止“千里之堤,溃于蚁穴”;测试,是“万丈高楼第一层”。
一、服务器性能测试
和监控一样,测试工作也分为服务器和应用两大部分。可以说,所有监控需要关心的数据,都对应地需要提前进行测试,这里不再举例。下面介绍一些常用的测试工具,功能也许会有重叠,但都会有自己侧重的有特色的地方。掌握好工具最锋利的部分,灵活运用,就可以构建出最适合自己的测试工具箱了。
1.IOzone
文件读写性能包括两个层面,一方面是纯粹的磁盘读写能力。这方面本书之前章节已有介绍,我们可以通过硬件设备的数据进行估算;另一方面是文件系统的读写能力。在这方面,各种文件系统的实现细节毫厘千里,一般运维人员很难也没有必要花费大量时间来逐一研读代码。通过尽可能贴近场景的模拟测试,来获取足以支持选择某个文件系统理由的数据,成为最方便快捷的办法。
IOzone可以使用系统调用,通过模拟在文件系统层面的各种读写操作,来统计系统的文件I/O性能。比较贴心的是,IOzone还能自动把测试结果通过gnuplot绘制成三维图形,使得使用者可以更直观地了解I/O情况。IOzone官网地址:upload/201811121537391120.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 660px; height: auto;" />
(2)文件I/O性能测试
前面说到过IOzone测试文件I/O。其实sysbench测试的要点大同小异,只是测试的I/O类型没有那么多。sysbench支持的I/O测试类型包括:seqwr(顺序写)、seqrewri(顺序重写)、seqrd(顺序读)、rndrd(随机读)、rndwr(随机写)和rndrw(随机读写)等六种。
此外,在随机读写测试模式下,还可以指定读写操作和写操作的百分比。测试需要先预设好指定大小文件。
(3)内存测试
内存测试中也可以指定顺序或者随机读写模式,不过这里最重要的是,指定的内存传输大小不能超过设备的实际内存大小!默认值为100GB,显然是大于一般设备的内存总量的。
(4)数据库测试
sysbench中的oltp测试支持MySQL、Oracle和PostgreSQL三种数据库,都需要在编译的时候指定库文件,然后在测试时通过"--db-driver"参数指定。如果编译的时候只支持一种数据库,那么可以忽略这个参数。
otp测试参数分为两部分:一部分是oltp相关参数,用于规划最终形成的数据库测试表的数据。最简单的就是表的大小,这个默认值是10000条记录。另一部分是db-driver相关参数,用来完成数据库连接,比如IP地址和端口、用户名密码,数据库是MySQL的话还有特有的存储引擎设定。MySQL数据库性能基准测试工具还有很多,比如MySQL自带的mysqlslap和Perl编写的MyBench、Super-Smack等。Sysbench自动支持了事务处理测试,还是比较方便的。
二、应用性能测试
网站应用除了数据库之外,另一个重要部分就是HTTP服务。尤其是大规模扩展的情况下,应用组件之间也大多采用HTTP接口相互调用,HTTP服务性能测试就更加重要。这里介绍三个各有优势的HTTP性能测试工具。
1.http_load
http_load是一个极为简单的小工具,它只利用单核单进程完成测试,可以很放心地在服务器上使用。使用方面,在总结过运维最常见的需求后,http_load只提供两对测试参数来随机测试一组URL列表。在一些需要快速定位的场合中,非常实用。
官网地址:http://www.acme.com/software/http_load/
使用详解:https://www.cnblogs.com/shijingjing07/p/6539179.html
2.AB(ApacheBench)
AB是Apache httpd项目自带的测试工具。也是大多数运维人员最熟悉和最早接触的HTTP服务性能测试工具。
AB对HTTP协议的支持比较全面,包括HEAD、GET、POST和PUT四种请求方式,以及自定义TCP收发缓冲的大小,自定义RequestHeader和Cookie,支持KeepAlive特性、HTTPS协议和WWW-Authentication认证等。不过AB只支持单个URL和并发请求/总请求数的测试模式(相对于http_load的-p/-f模式)。
AB的安装和使用参考:https://www.cnblogs.com/Ryana/p/6279232.html
AB的使用详解:https://www.cnblogs.com/xiaoyaowuming/p/5622660.html
3.weighttp
weighttp和AB类似,它是另一款著名开源HTTP服务器Lighttpd项目下的性能测试工具。官网地址:http://redmine.lighttpd.net/projects/weighttp/wiki
weighttp目前的测试模式将很少。但作为年龄比较小的项目,weighttp也有自己的特点-它底层使用libev库。libev是一个性能比著名的libevent还要好一些的网络事件驱动库。所以weighttp本身的性能也很不错。
安装和使用:https://blog.csdn.net/yang382197207/article/details/19190089?locationNum=2&fps=1
三、分布式测试环境
1.AutoBench
AutoBench是一个用Perl编写的基于Httperf开发的分布式测试系统。代码量不大,使用也很简单,我们可以从这个系统中学习如何构建一个分布式测试环境。
官网地址:http://www.xenoclast.org/autobench/
AutoBench安装和使用:https://www.cnblogs.com/Ryana/p/6279232.html
2.TCPCopy
TCPCopy的用途很广,常见的应用场景如下:
(1)分布式压力测试:利用在线数据,可以测试系统能够承受的压力大小,也可以提前发现一些bug。
(2)上线测试:可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题。
(3)对比测试:针对不同程序或相同程序的不同版本,使用相同的流量请求做性能对比。
(4)流量放大:可以利用多种手段构造无限在线压力,满足压力测试要求。
(5)利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实。
(6)热备份
代码托管地址:https://github.com/wangbin579/tcpcopy
TCPCopy安装和使用:https://www.cnblogs.com/phennry/p/6382755.html?utm_source=itdadao&utm_medium=referralhttps://www.cnblogs.com/youcong/p/9942188.html
