码迷,mamicode.com
首页 > Web开发 > 详细

Web压力测试

时间:2018-01-30 19:38:50      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:传输   last   print   tab   4.0   延长   网络   term   3.1   

  • webbench
  • ab
  • siege
  • 查看连接数量
  • tcp连接解析

  • cd /usr/local/src/
    wget http://www.ha97.com/code/webbench-1.5.tar.gz
    tar zxvf webbench-1.5.tar.gz
    cd webbench-1.5
    make
    

    webbench -c 并发数 -t 运行测试时间 URL

    ./webbench -c 10000  -t 60  http://42.62.55.58:8003/
    
    Speed=44365 pages/min, 96247 bytes/sec.
    Requests: 44365 susceed, 0 failed.
    
    每分钟响应请求数:44365              每秒钟传输数据量  93kb 每秒
    
    请求: 44365 成功  0 个失败
    
    实际为每秒钟 请求739个。
    
    wget  http://download.joedog.org/siege/siege-4.0.4.tar.gz
    tar -zxvf siege-4.0.4.tar.gz
    cd siege-4.0.4/
    ./configure  --prefix=/usr/local/siege
    make
    make install
    
    ##修改最大连接数量
    vim /usr/local/siege/etc/siegerc
    limit = 10000
    
    cd /usr/local/siege/bin/
    ./siege  http://42.62.55.58:8003/asset/api/asset.html  --header="Authorization: Basic YWRtaW46MXFhei4yd3N4"   -r 10 -c 400
    
    Transactions:                   4152 hits   #已完成的事务总数
    Availability:                  92.41 %       #完成的成功率
    Elapsed time:                  58.99 secs    #总共使用的时间
    Data transferred:               5.11 MB   
    Response time:                  2.14 secs
    Transaction rate:              70.38 trans/sec
    Throughput:                     0.09 MB/sec
    Concurrency:                  150.91        #实际最高并发链接数
    Successful transactions:        4152
    Failed transactions:             341
    Longest transaction:           36.69
    Shortest transaction:           0.20
    
    yum -y install httpd-tools
    ab -c 10000  -n 50000   http://42.62.55.56/index.html  
    
    Document Path:          /index.html
    Document Length:        612 bytes
    
    Concurrency Level:      10000                ##并发数量
    Time taken for tests:   7.113 seconds
    Complete requests:      50000
    Failed requests:        0
    Write errors:           0
    Total transferred:      44242210 bytes     #整个过程中的网络传输量
    HTML transferred:       32310540 bytes     # HTML
    Requests per second:    7029.83 [#/sec] (mean)      #最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
    Time per request:       1422.509 [ms] (mean)        #最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
    Time per request:       0.142 [ms] (mean, across all concurrent requests)  #每个连接请求实际运行时间的平均值
    Transfer rate:          6074.52 [Kbytes/sec] received  #平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        3  695 633.1    413    3502
    Processing:   247  512 305.7    439    5780
    Waiting:        2  394 309.9    334    5608
    Total:        269 1207 702.4    908    6101
    
    Percentage of the requests served within a certain time (ms)
      50%    908
      66%   1081
      75%   1752
      80%   1847
      90%   1904
      95%   2057
      98%   3762
      99%   3941
    100%   6101 (longest request)
    

    web服务器端 查看连接数量

    netstat -n|grep  ^tcp|awk ‘{print $NF}‘|sort -nr|uniq -c
    
       9022 TIME_WAIT           #  主动断开的一方,发送完最后一次ACK之后进入的状态
       1099 SYN_RECV            # 服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态
         12 LAST_ACK            # 通信双方发送了最后一个FIN的时候,发送方此时处于LAST_ACK状态,
        322 FIN_WAIT2           # 服务端在主动发起断开的连接请求时,发送FIN并收到客户端的ACK进入的等待客户端FIN的状态
       2038 FIN_WAIT1           # 服务端发送完成FIN后还未接收到客户端返回的ACK时进入的状态
       4384 ESTABLISHED         # 已建立连接的
       6633 CLOSING             # 关闭的
          1 CLOSE_WAIT          # 关闭等待
    
    ESTABLISHED->CLOSE_WAIT->(发送ACK)->LAST_ACK->(发送FIN+接收ACK)->CLOSED
    

    三次握手:

    技术分享图片

    第一次握手
    客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。

    * PS1:SYN=1,ACK=0表示该报文段为连接请求报文。
    * PS2:x为本次TCP通信的字节流的初始序号。

    TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号。

    第二次握手
    服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。
    该应答发送完成后便进入SYN-RCVD状态。

    * PS1:SYN=1,ACK=1表示该报文段为连接同意的应答报文。
    * PS2:seq=y表示服务端作为发送者时,发送字节流的初始序号。
    * PS3:ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。

    第三次握手
    当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
    该报文段的头部为:ACK=1,seq=x+1,ack=y+1。

    客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

    TCP四次挥手

    技术分享图片

    TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

    第一次挥手
    若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:
    FIN=1,seq=u。此时,A将进入FIN-WAIT-1状态。

    * PS1:FIN=1表示该报文段是一个连接释放请求。
    * PS2:seq=u,u-1是A向B发送的最后一个字节的序号。

    第二次挥手
    B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:
    ACK=1,seq=v,ack=u+1。

    * PS1:ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
    * PS2:seq=v,v-1是B向A发送的最后一个字节的序号。
    * PS3:ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。

    A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。
    第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。

    第三次挥手
    当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。

    第四次挥手

    A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
    为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?
    为了保证B能收到A的确认应答。

    若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

    Web压力测试

    标签:传输   last   print   tab   4.0   延长   网络   term   3.1   

    原文地址:http://blog.51cto.com/hequan/2066839

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!