Apache服务ab压力测试
将ab压力测试之前,先讲解一下相关概念:
吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:
总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
并发连接数(The number of concurrent connections)
某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
并发用户数(The number of concurrent users,Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
用户平均请求等待时间(Time per request)
计算公式:
处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:
处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
ab压力测试工具
Apache自带压力测试工具ab,简单易用,且可以模拟各种条件对Web服务器发起测试请求;
ab工具可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括数据的网络传输时间以及用户PC本地的计算时间,从而可以通过观测各种时间指标判断Web服务器的性能,以便进行参数的优化调整。
- 在进行性能调整优化过程中,可用ab压力测试工具进行优化效果的测试
使用ab压力测试工具优化过程
优化前先使用ab工具进行压力测试;
优化后,重启服务,再使用ab进行压力测试;
对比两次测试的结果,看优化效果是否明显;
- 为了能更客观的评价web服务的性能,一般优化前后都要进行多次测试,取测试结果的平均值进行对比。
ab工具的使用
命令格式:
ab [options] 网站网址
常用参数:
-n:总共的请求执行数-c:并发数-t:执行测试的总时间,单位是秒-v:打印多少故障排除信息-V:显示版本号并退出
手工编译安装Apache服务:
(1)安装DNS服务的软件包bind。
[root@localhost ~]# yum install bind -y......//省略安装过程[root@localhost ~]#
(2)对DNS服务的主配置文件进行修改。
[root@localhost ~]# vim /etc/named.confoptions { listen-on port 53 { any; }; //127.0.0.1改为any listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; //localhost改为any
(3)对DNS服务的区域配置文件进行修改。
[root@localhost ~]# vim /etc/named.rfc1912.zoneszone "abc.com" IN { //添加一个域名信息 type master; file "abc.com.zone"; allow-update { none; };};
(4)查看一下IP地址。
[root@localhost named]# ifconfig ens33: flags=4163 mtu 1500 inet 192.168.52.133 netmask 255.255.255.0 broadcast 192.168.52.255 inet6 fe80::3e1d:31ba:f66a:6f80 prefixlen 64 scopeid 0x20 ether 00:0c:29:27:1c:3f txqueuelen 1000 (Ethernet) RX packets 14532 bytes 20210558 (19.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6054 bytes 399142 (389.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(5)保留权限复制一份DNS服务的区域数据配置文件,进行修改。
[root@localhost ~]# cd /var/named/ //切换目录[root@localhost named]# ls //查看data dynamic named.ca named.empty named.localhost named.loopback slaves[root@localhost named]# cp -p named.localhost abc.com.zone //复制[root@localhost named]# vim abc.com.zone $TTL 1D@ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 127.0.0.1www IN A 192.168.52.133 //添加IPv4的域名解析
(6)开启named服务。
[root@localhost named]# systemctl start named //开启服务[root@localhost named]# systemctl stop firewalld.service //关闭防火墙[root@localhost named]# setenforce 0 //关闭增强性安全功能[root@localhost named]#
(7)在宿主机将我们所需的工具包共享出去。
(8)通过Samba服务将工具包挂载到Linux系统。
[root@localhost ~]# smbclient -L //192.168.100.50/ //查看共享Enter SAMBA\root's password: //匿名共享,没有密码,直接回车OS=[Windows 10 Enterprise LTSC 2019 17763] Server=[Windows 10 Enterprise LTSC 2019 6.3] Sharename Type Comment --------- ---- ------- IPC$ IPC 远程 IPC share Disk tools Disk Users Disk Connection to 192.168.100.50 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)NetBIOS over TCP disabled -- no workgroup available[root@localhost ~]# mkdir /mnt/tools //创建挂载目录[root@localhost ~]# mount.cifs //192.168.100.50/tools /mnt/tools/ //挂载Password for root@//192.168.100.50/tools: [root@localhost ~]# cd /mnt/tools/ //进入挂载目录[root@localhost tools]# ls //查看awstats-7.6.tar.gz extundelete-0.2.4.tar.bz2 forbid.png jdk-8u191-windows-x64.zip LAMP-C7cronolog-1.6.2-14.el7.x86_64.rpm fiddler.exe intellijideahahau2018.rar john-1.8.0.tar.gz picture.jpg[root@localhost tools]#
(9)将源码编译安装Apache服务的压缩包解压到"/opt/"目录。
[root@localhost tools]# cd LAMP-C7/ //切换目录[root@localhost LAMP-C7]# lsapr-1.6.2.tar.gz Discuz_X2.5_SC_UTF8.zip LAMP-php5.6.txt php-5.6.11.tar.bz2apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 mysql-5.6.26.tar.gz[root@localhost LAMP-C7]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt/ //解压......//省略解压详情[root@localhost LAMP-C7]# tar zxvf apr-1.6.2.tar.gz -C /opt/ //解压......//省略解压详情[root@localhost LAMP-C7]# tar zxvf apr-util-1.6.0.tar.gz -C /opt/ //解压......//省略解压详情
(10)进入"/opt/"目录,将两个apr包移动到"httpd-2.4.29/srclib/"目录,并重命名。
[root@localhost LAMP-C7]# cd /opt/ [root@localhost opt]# lsapr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
(11)进入"httpd-2.4.29/"目录,然后安装编译所需环境包。
[root@localhost opt]# lshttpd-2.4.29 rh[root@localhost opt]# cd httpd-2.4.29/[root@localhost httpd-2.4.29]# lsABOUT_APACHE ap.d CHANGES docs httpd.spec libhttpd.dep Makefile.win README srclibacinclude.m4 build CMakeLists.txt emacs-style include libhttpd.dsp modules README.cmake supportApache-apr2.dsw BuildAll.dsp config.layout httpd.dep INSTALL libhttpd.mak NOTICE README.platforms testApache.dsw BuildBin.dsp configure httpd.dsp InstallBin.dsp LICENSE NWGNUmakefile ROADMAP VERSIONINGapache_probes.d buildconf configure.in httpd.mak LAYOUT Makefile.in os server[root@localhost httpd-2.4.29]# [root@localhost httpd-2.4.29]# yum -y install \> gcc \> gcc-c++ \> make \> pcre \> pcre-devel \> expat-devel \> zlib-devel \> perl......//省略安装过程
(12)进行对Apache服务器的配置。
[root@localhost httpd-2.4.29]# ./configure \> --prefix=/usr/local/httpd \ //安装路径> --enable-so \ //启用动态加载模块支持> --enable-rewrite \ //启用网页地址重写功能> --enable-charset-lite \ //启用字符集支持> --enable-cgi //启用CGI脚本程序支持
(13)编译安装Apache服务。
[root@localhost httpd-2.4.29]# make && make install......//省略编译安装过程[root@localhost httpd-2.4.29]#
(14)对Apache服务配置文件进行修改
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf //创建软链接,方便使用[root@localhost httpd-2.4.29]# Listen 192.168.50.133:80 //开启IPv4监听#Listen 80 //注释IPv6监听#ServerName www.abc.com:80 //设置域名
ab压力测试
[root@localhost named]# ab -n 3000 -c 1000 www.abc.com/index.htmlThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking www.abc.com (be patient)Completed 300 requestsCompleted 600 requestsCompleted 900 requestsCompleted 1200 requestsCompleted 1500 requestsCompleted 1800 requestsCompleted 2100 requestsCompleted 2400 requestsCompleted 2700 requestsCompleted 3000 requestsFinished 3000 requestsServer Software: Apache/2.4.29 //http响应数据的头信息Server Hostname: www.abc.com //请求的url中的主机名称Server Port: 80 //web服务器软件的监听端口Document Path: /index.html //请求的url根的绝对路径Document Length: 45 bytes //http响应数据的正文长度Concurrency Level: 1000 //并发的用户数Time taken for tests: 21.061 seconds //所有这些请求被处理完成所花费的时间总和Complete requests: 3000 //表示请求总数Failed requests: 220 //失败的请求总数 (Connect: 0, Receive: 0, Length: 220, Exceptions: 0)Total transferred: 810356 bytes //请求的响应数据长度总数HTML transferred: 126180 bytesRequests per second: 142.44 [#/sec] (mean) //服务器的吞吐率,每秒处理的请求总数Time per request: 7020.414 [ms] (mean) //用户平均请求等待时间Time per request: 7.020 [ms] (mean, across all concurrent requests) //每个请求实际运行时间的平均值Transfer rate: 37.57 [Kbytes/sec] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 9 14.5 4 62Processing: 9 1389 5135.1 27 21027Waiting: 0 27 34.4 22 234Total: 13 1398 5132.8 33 21027Percentage of the requests served within a certain time (ms) //描述每个请求处理时间的分布情况。 50% 33 66% 37 75% 42 80% 55 90% 95 95% 21020 98% 21027 99% 21027 100% 21027 (longest request)[root@localhost named]#
参数 | 描述 |
---|---|
Server Software | http响应数据的头信息 |
Server Hostname | 请求的url中的主机名称 |
Server Port | web服务器软件的监听端口 |
Document Path | 请求的url根的绝对路径 |
Document Length | http响应数据的正文长度 |
Concurrency Level | 并发的用户数 |
Time taken for tests | 所有这些请求被处理完成所花费的时间总和 |
Complete requests | 表示总请求数 |
Failed requests | 失败的请求总数 |
Total transferred | 请求的响应数据长度总和 |
Requests per second | 服务器的吞吐率,每秒处理的请求数 |
Time per request | 用户平均请求等待时间 |
Time per request | 每个请求实际运行时间的平均值 |
Percentage of the requests served within a certain time (ms) | 描述每个请求处理时间的分布情况 |