Nginx系列笔记-压测

     这篇文章主要介绍了配置ab来为Nginx服务器做压力测试的方法,ab是针对Apache的测试工具但本文讲解其测试Nginx的过程,需要的朋友可以参考下

     但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同。面对这些问题,我们只能尽量去想方设法去模拟。所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数。

    目前较为常见的网站压力测试工具有webbench、ab(apache bench)、tcpcopy、loadrunner 。

    我本机是采用VM虚拟的Linux系统: CenterOs7 64位  1G虚拟内存  33G硬盘空间;

    本章主要是介绍ab的测试流程:

   安装AB ;

     yum install -y httpd-tools;

     ab –help;

blob.png

准备之后我们就可以测试了

如:

   ab -kc 1000 -n 10000 http://192.168.1.104/index.html (意思是:1000并发,10000请求)

输出:

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking 192.168.1.104 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
 
 
Server Software:        nginx/1.9.9
Server Hostname:        192.168.1.104
Server Port:            80
 
Document Path:          /index.html
Document Length:        612 bytes
 
Concurrency Level:      1000
Time taken for tests:   1.603 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    10000
Total transferred:      8640000 bytes
HTML transferred:       6120000 bytes
Requests per second:    6237.84 [#/sec] (mean)
Time per request:       160.312 [ms] (mean)
Time per request:       0.160 [ms] (mean, across all concurrent requests)
Transfer rate:          5263.18 [Kbytes/sec] received
 
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   22 111.2      0    1005
Processing:     7  117 300.5     35    1346
Waiting:        7  117 300.5     35    1346
Total:          7  139 347.9     35    1531
 
Percentage of the requests served within a certain time (ms)
  50%     35
  66%     36
  75%     37
  80%     38
  90%    183
  95%   1338
  98%   1348
  99%   1523
 100%   1531 (longest request)

上述指标说明:

Requests per second:    6237.84 [#/sec] (mean)

表示当前测试的服务器每秒可以处理6237.84个静态html的请求事务,后面的mean表示平均。这个数值表示当前机器的整体性能,值越大越好。

Time per request:       160.312 [ms] (mean)

Time per request:       0.160 [ms] (mean, across all concurrent requests)

   单个并发的延迟时间,后面的mean表示平均。隔离开当前并发,单独完成一个请求需要的平均时间。

   前一个衡量单个请求的延迟,cpu是分时间片轮流执行请求的,多并发的情况下,一个并发上的请求时需要等待这么长时间才能得到下一个时间片。
        计算方法Time per request: 0.160 [ms] (mean, across all concurrent requests)*并发数

        通俗点说就是当以-c 10的并发下完成-n 1000个请求的同时,额外加入一个请求,完成这个求平均需要的时间。

   后一个衡量性能的标准,它反映了完成一个请求需要的平均时间,在当前的并发情况下,增加一个请求需要的时间。
      计算方法Time taken for tests: 0.160 seconds/Complete requests: 1000

      通俗点说就是当以-c 10的并发下完成-n 1001个请求时,比完成-n1000个请求多花的时间。
你可以适当调节-c 和-n大小来测试服务器性能,借助htop指令来直观的查看机器的负载情况。

     如果想再详细的查看和统计通过Nginx 的并发指标,可以通过 –with-http_stub_status_module 是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态。

blob.png

我的Nginx编译参数:

./configure –prefix=/usr/local/nginx –add-module=/opt/ngx_http_consistent_hash-master –with-http_gzip_static_module –with-http_stub_status_module

开启:

location  ~ ^/status/ {

             stub_status on; #Nginx 状态监控配置

             access_log off;

             #allow 限制统计模块的访问权限

             #deny all;

  }

blob.png

压测的过程中可以看看这些数值的变化;

在压测过程中遇到种种问题,在下篇文章将重点分析Nginx的压测优化过程;

发表评论