在一个网站应用系统的完整生命周期中,上线以前还有漫长的开发和测试阶段。做为系统将来的管理者和负责人,运维人员有必要在这个阶段就参与进来,根据业务的预期,完成系统层面的容量和压力测试,根据测试数据作出切实的运维规划,包括采购清单、结构设计、预警阈值和应急预案等。html
能够说,监控,是防止“千里之堤,溃于蚁穴”;测试,是“万丈高楼第一层”。mysql
1、服务器性能测试git
和监控同样,测试工做也分为服务器和应用两大部分。能够说,全部监控须要关心的数据,都对应地须要提早进行测试,这里再也不举例。下面介绍一些经常使用的测试工具,功能也许会有重叠,但都会有本身侧重的有特点的地方。掌握好工具最锋利的部分,灵活运用,就能够构建出最适合本身的测试工具箱了。github
1.IOzonesql
文件读写性能包括两个层面,一方面是纯粹的磁盘读写能力。这方面本书以前章节已有介绍,咱们能够经过硬件设备的数据进行估算;另外一方面是文件系统的读写能力。在这方面,各类文件系统的实现细节毫厘千里,通常运维人员很难也没有必要花费大量时间来逐一研读代码。经过尽量贴近场景的模拟测试,来获取足以支持选择某个文件系统理由的数据,成为最方便快捷的办法。数据库
IOzone可使用系统调用,经过模拟在文件系统层面的各类读写操做,来统计系统的文件I/O性能。比较贴心的是,IOzone还能自动把测试结果经过gnuplot绘制成三维图形,使得使用者能够更直观地了解I/O状况。IOzone官网地址:http://www.iozone.org/缓存
IOzone目前支持13种I/O类型的测试,能够根据业务状况采用多个"-I"参数来指定,具体参数值和类型以下:服务器
(1)write/re-write网络
写新文件和重写一个已存在文件,差异在于重写文件不须要建立文件元信息。数据结构
(2)read/re-read
读文件和重读文件,差异在于操做系统的缓存。
(3)random-read/write
随机读写。主要受操做系统缓存大小、磁盘数据和RAID级别、磁盘转速等因素影响。
(4)Read-backwards
逆序读文件。某些操做系统对上TB大小的文件读写作的不太好,因此出现这个测试。
(5)Re-write-record
对文件的一个特定点进行重写测试。当这个特定点的大小分布介于CPU缓存、TLB、操做系统缓存的不一样区间时,性能会大大不一样。
(6)stride-read
跳跃式读取文件。好比从文件起始位置连续读取4KB内容,而后seek到200KB以后,再读取4KB长度,接着又seek,以此类推。这个行为用来模拟某些应用的特定数据结构操做。
(7)fwrite/re-fwrite
使用fwrite库测试。fwrite会利用用户空间的buffer,因此当应用在写比较小的内容时,fwrite会进行阻塞合并操做,而后每次以较大的内容进行一次真正的写操做以提升性能。
(8)fread/re-fread
使用fread库测试,特色和fwrite一致。
(9)random mix
混合随机读写。这个测试只用于吞吐量测试。每一个线程均可以执行读或者写,具体如何执行则由round-robin轮询决定。
(10)pwrite/re-pwrite
在文件的指定偏移量处开始写和重写。以前的测试都是从起始位置开始的。
(11)pread/re-pread
在文件的指定偏移量处开始读和重读。
(12)pwritev/re-pwritev
与pwrite相似,不过是从多个buffer中写出数据。
(13)preadv/re-preadv
和pread相似,不过是读取到多个buffer中。
关于IOzone的安装和使用,我以为能够参考这个教程:https://blog.csdn.net/u012528029/article/details/51002950
2.Netperf
衡量网络性能主要有五项指标,包括:可用性、响应时间、网络利用率、网络吞吐量和网络带宽容量。而获取这些的指标方式,也有三种:
其一,经过Net-SNMP工具从网络设备中读取数据;
其二,经过TCPDump工具抓取网络报文分析;
其三,经过模拟测试获取数据。
最多见的模拟测试工具,就是Netperf。Netperf工具以client/server方式工做。server端是netserver,用来侦听来自client端的链接;client是netperf,用来向server发起网络测试。在client和server之间,首先要创建一个控制链接,传递有关测试配置的信息,以及测试的结果。在控制链接创建并传递测试配置信息之后,client和server之间会再创建一个测试链接,用来来回传递这特殊的流量模式,以测试网络的性能。
官网地址:http://www.netperf.org/
(1)测试流量模式介绍
Netperf主要测试的是基于TCP或UDP的传输,针对两种协议分别有不一样的流量模式。Netperf测试结果所反映的是一个系统可以以多块的速度向另一个系统发送数据,以及另一个系统可以以多块的速度接收数据。
TCP协议可以提供端对端的可靠传输,其创建并维护链接、控制数据有序地传递等都会消耗必定的网络带宽。因此TCP测试会比较考虑带宽和效率的问题。Netperf能够模拟三种不一样的TCP流量模式。
a.单个TCP链接,批量传输大量数据。
b.单个TCP链接,Client少许请求/Server大量响应的交易模式。
c.多个TCP链接,每一个链接中一对请求/响应的交易模式。
UDP协议没有创建链接的负担,可是却不能保证传输的可靠性,使用UDP的应用程序须要自行跟踪每一个发出的分组,并重发丢失的分组。因此UDP测试会比较关注丢包率的问题。Netperf能够模拟两种UDP的流量模式。
a.从client到server的单向批量传输。
b.请求/响应的交易模式。
注意:因为UDP传输的不可靠性,在使用Netperf时要确保发送的缓冲区大小不能大于接收缓冲区大小,不然数据会丢失,Netperf测试结论丢包率会变得比实际大不少。
3.pktgen
pktgen工具,主要用来测试服务器自己在网卡方面的性能,考量服务器自己对包的处理能力-这也是上层协议和应用的性能基础。事实上在全面测试中,经过dstat命令能够发现,HTTP服务极限场景的收发包速度,和pktgen测试的结果是接近的。
pktgen是一个Linux内核模块,经过CONFIG_NET_PKTGEN开关来控制编译便可。pktgen运行的时候,会自动在设备的每一个CPU上都绑定运行一个线程,同时在procfs伪文件系统上生成状态文件和控制文件。包括如下三种:
(1)/proc/net/pktgen/pgctrl
(2)/proc/net/pktgen/kpktgend_0
(3)/proc/net/pktgen/eth*
pktgen的全部配置和命令都是经过想procfs输入指令来完成。
4.sysbench
sysbench是为数据库应用准备的系统测试工具,也就是说,影响数据库性能的系统组件,包括CPU、内存、文件系统、进程调度和线程等,sysbench均可以对其进行测试。
项目地址:https://sourceforge.net/
(1)CPU性能测试
CPU测试主要测试的是计算能力,具体来讲就是作质数的加法运算。命令以下:
sysbench --test=cpu --cpu-max-prime=20000 run
(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自动支持了事务处理测试,仍是比较方便的。
2、应用性能测试
网站应用除了数据库以外,另外一个重要部分就是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
3、分布式测试环境
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=referral