【问题标题】:ab load testingab负载测试
【发布时间】:2012-09-25 18:42:16
【问题描述】:

有人可以告诉我如何使用apache bench tool (ab) 对我的网站进行负载测试吗?

我想知道以下内容:

网站每分钟可以处理多少人?

请引导我完成我应该运行的命令来解决这个问题。

我尝试了每个教程,但它们令人困惑。

【问题讨论】:

    标签: apache benchmarking


    【解决方案1】:

    apache 基准测试工具非常基础,虽然它可以让您对某些性能有一个可靠的了解,但如果您打算让您的网站在生产中承受严重的压力,那么只依赖它是一个坏主意.

    话虽如此,下面是最常用和最简单的参数:

    -c:(“并发”)。指示有多少客户(人/用户)将同时访问该站点。当ab 运行时,将有-c 客户访问该站点。这实际上决定了您的网站在基准测试期间将承受的压力。

    -n:表示将发出多少请求。这只是决定基准的长度。您的服务器可以支持的高 -n 值和 -c 值是确保事情不会在持续压力下崩溃的好主意:支持 5 秒和 5 小时的压力是不一样的。

    -k:这是浏览器天生具备的“KeepAlive”功能。您不需要传递 -k 的值,因为它是“布尔值”(意思是:它表示您希望您的测试使用来自 HTTP 的 Keep Alive 标头并维持连接)。由于浏览器会执行此操作,并且您可能希望模拟您的网站从浏览器中获得的压力和流量,因此建议您对此进行基准测试。

    最后一个参数只是主机。默认情况下,如果您不指定它,它将访问 http:// 协议。

    ab -k -c 350 -n 20000 example.com/
    

    通过发出上述命令,您将通过 350 个同时连接点击 http://example.com/,直到满足 20,000 个请求。它将使用 keep alive 标头来完成。

    在流程完成 20,000 个请求后,您将收到有关统计信息的反馈。这将告诉您在使用上述参数时网站在您施加的压力下的表现如何。

    要了解网站可以同时处理多少人,只需查看响应时间(平均值、最小和最大响应时间、失败的请求等)是否是您的网站可以接受的数字(不同的网站可能希望不同速度)。您可以使用不同的 -c 值运行该工具,直到您说“如果我增加它,它会开始收到失败的请求并且它会中断”。

    根据您的网站,您预计每分钟的平均请求数。这变化很大,您将无法使用 ab 模拟它。但是,请这样想:如果您的平均用户每分钟会遇到 5 个请求,并且您认为有效的平均响应时间是 2 秒,这意味着每分钟 10 秒有 1 个用户会收到请求,这意味着仅有 1/6 的时间会到达网站。这也意味着,如果您有 6 个用户同时使用 ab 访问该站点,那么您很可能有 36 个用户在模拟中,即使您的并发级别 (-c) 只有 6。

    这取决于您对使用该网站的用户的期望行为,但您可以从“我希望我的用户每分钟点击 X 个请求并且我认为平均响应时间为 2 秒有效”中得到它。然后只需修改您的 -c 级别,直到达到 2 秒的平均响应时间(但确保最大响应时间和 stddev 仍然有效),然后看看您可以使 -c 多大。

    我希望我解释清楚:) 祝你好运

    【讨论】:

    • 直截了当的回答!您能否进一步解释一下为什么会出现此问题“这也意味着如果您有 6 个用户同时使用 ab 访问该站点,那么您很可能有 36 个用户在模拟中,即使您的并发级别 (-c) 只有6.”
    • 提醒一下,如果页面有动态内容,您可能需要添加-l 选项,这样您就不会因为内容长度不同而收到一堆失败的请求请求。
    【解决方案2】:

    请引导我完成我应该运行的命令来解决这个问题。

    您可以做的最简单的测试是执行 1000 个请求,一次 10 个(这大约模拟了 10 个并发用户每人获得 100 个页面 - 在整个测试期间)。

    ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/
    

    -n 1000 是要发出的请求数。

    -c 10 告诉 AB 一次执行 10 个请求,而不是一次执行 1 个请求,以更好地模拟并发访问者(相对于顺序访问者)。

    -k 发送 KeepAlive 标头,要求 Web 服务器在每个请求完成后不要关闭连接,而是继续重复使用它。

    我还发送了额外的标头Accept-Encoding: gzip, deflate,因为 mod_deflate 几乎总是用于将 text/html 输出压缩 25%-75% - 由于它对整体性能的影响,不应忽视其效果Web 服务器(即,可以在相同的时间内传输 2 倍的数据,等等)。

    结果:

    Benchmarking www.example.com (be patient)
    Completed 100 requests
    ...
    Finished 1000 requests
    
    
    Server Software:        Apache/2.4.10
    Server Hostname:        www.example.com
    Server Port:            80
    
    Document Path:          /
    Document Length:        428 bytes
    
    Concurrency Level:      10
    Time taken for tests:   1.420 seconds
    Complete requests:      1000
    Failed requests:        0
    Keep-Alive requests:    995
    Total transferred:      723778 bytes
    HTML transferred:       428000 bytes
    Requests per second:    704.23 [#/sec] (mean)
    Time per request:       14.200 [ms] (mean)
    Time per request:       1.420 [ms] (mean, across all concurrent requests)
    Transfer rate:          497.76 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   0.1      0       1
    Processing:     5   14   7.5     12      77
    Waiting:        5   14   7.5     12      77
    Total:          5   14   7.5     12      77
    
    Percentage of the requests served within a certain time (ms)
      50%     12
      66%     14
      75%     15
      80%     16
      90%     24
      95%     29
      98%     36
      99%     41
     100%     77 (longest request)
    

    为了最简单的解释,忽略这一行以外的所有内容:

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

    将其乘以 60,每分钟就有你的请求数。

    要获得真实世界的结果,您需要测试 Wordpress 而不是一些静态 HTML 或 index.php 文件,因为您需要了解所有内容如何一起执行:包括复杂的 PHP 代码和多个 MySQL 查询...

    例如,这里是在相同系统和 WAMP 环境中测试全新安装的 Wordpress 的结果(我使用的是 WampDeveloper,但也有 Xampp、WampServer 等)...

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

    现在慢了 37 倍!

    在负载测试之后,您可以做很多事情来提高整体性能(每秒请求数),并让 Web 服务器在更大负载下更加稳定(例如,增加 -n 和 @ 987654332@ 倾向于使 Apache 崩溃),您可以在此处阅读:

    Load Testing Apache with AB (Apache Bench)

    【讨论】:

      【解决方案3】:

      在 Windows 上设置 Apache Bench(AB) 的步骤(IMO - 推荐)。

      第 1 步 - 安装 Xampp。
      第 2 步 - 打开 CMD。
      第 3 步 - 从 CMD
      转到 apache bench 目标 (cd C:\xampp\apache\bin) 第 4 步 - 粘贴命令 (ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
      第 5 步 - 等待它。你完成了

      【讨论】:

      • 它不工作...我收到此错误:基准测试本地主机(请耐心等待)...apr_socket_recv:连接被拒绝(111)
      • 将 localhost 替换为 127.0.0.1
      【解决方案4】:

      仅使用 ab 对您的 API 进行负载测试是不够的。不过,我认为这是一个很好的工具,可以让您对网站的性能有一个基本的了解。

      如果你想在后台使用 ab 命令同时测试多个 API 端点,使用不同的数据,你需要使用“nohup”命令。即使您关闭终端,它也会运行任何命令。

      我写了一个简单的脚本来自动化整个过程,请随意使用:http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

      【讨论】:

        【解决方案5】:

        我也很好奇是否可以使用 apache abs 或构造/破坏 php 测量脚本或 php 扩展来测量脚本的速度。

        最后两个对我来说失败了:它们是近似的。 之后我想尝试“ab”和“abs”。

        命令“ab -k -c 350 -n 20000 example.com/”很漂亮,因为它更简单!

        但是有人想过在任何 apache 服务器上使用“localhost”吗,例如 www.apachefriends.org?

        您应该在根目录中创建一个文件夹,例如“bench”,其中有 2 个文件:测试“bench.php”并引用“void.php”。

        然后:对其进行基准测试!

        bench.php

        <?php
        
        for($i=1;$i<50000;$i++){
            print ('qwertyuiopasdfghjklzxcvbnm1234567890');
        }
        ?>
        

        void.php

        <?php
        ?>
        

        在您的桌面上,您应该使用这样的 .bat 文件(在 Windows 中):

        bench.bat

        "c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
        "c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
        pause
        

        现在如果你仔细观察...

        void 脚本不会产生零结果!!! 所以结论是:从第二个结果来看,第一个结果应该减少!!!

        我得到了:

        c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
        This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
        Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
        Licensed to The Apache Software Foundation, http://www.apache.org/
        
        Benchmarking localhost (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:        Apache/2.4.33
        Server Hostname:        localhost
        Server Port:            80
        
        Document Path:          /bench/void.php
        Document Length:        0 bytes
        
        Concurrency Level:      1
        Time taken for tests:   11.219 seconds
        Complete requests:      10000
        Failed requests:        0
        Total transferred:      2150000 bytes
        HTML transferred:       0 bytes
        Requests per second:    891.34 [#/sec] (mean)
        Time per request:       1.122 [ms] (mean)
        Time per request:       1.122 [ms] (mean, across all concurrent requests)
        Transfer rate:          187.15 [Kbytes/sec] received
        
        Connection Times (ms)
                      min  mean[+/-sd] median   max
        Connect:        0    0   0.3      0       1
        Processing:     0    1   0.9      1      17
        Waiting:        0    1   0.9      1      17
        Total:          0    1   0.9      1      17
        
        Percentage of the requests served within a certain time (ms)
          50%      1
          66%      1
          75%      1
          80%      1
          90%      1
          95%      2
          98%      2
          99%      3
         100%     17 (longest request)
        
        c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
        This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
        Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
        Licensed to The Apache Software Foundation, http://www.apache.org/
        
        Benchmarking localhost (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:        Apache/2.4.33
        Server Hostname:        localhost
        Server Port:            80
        
        Document Path:          /bench/bench.php
        Document Length:        1799964 bytes
        
        Concurrency Level:      1
        Time taken for tests:   177.006 seconds
        Complete requests:      10000
        Failed requests:        0
        Total transferred:      18001600000 bytes
        HTML transferred:       17999640000 bytes
        Requests per second:    56.50 [#/sec] (mean)
        Time per request:       17.701 [ms] (mean)
        Time per request:       17.701 [ms] (mean, across all concurrent requests)
        Transfer rate:          99317.00 [Kbytes/sec] received
        
        Connection Times (ms)
                      min  mean[+/-sd] median   max
        Connect:        0    0   0.3      0       1
        Processing:    12   17   3.2     17      90
        Waiting:        0    1   1.1      1      26
        Total:         13   18   3.2     18      90
        
        Percentage of the requests served within a certain time (ms)
          50%     18
          66%     19
          75%     19
          80%     20
          90%     21
          95%     22
          98%     23
          99%     26
         100%     90 (longest request)
        
        c:\xampp\htdocs\bench>pause
        Press any key to continue . . .
        

        90-17= 73 我期望的结果!

        【讨论】:

          【解决方案6】:

          执行步骤: 负载测试命令

          • 第 1 步 - 安装 Xampp。
          • 第 2 步 - 打开 CMD。
          • 第 3 步 - 从 CMD 转到 Apache bench 目标 (cd C:\xampp\apache\bin)。
          • 第 4 步 - 粘贴命令
            ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:port/
            
          • 第 5 步 - 等待它。大功告成

          1. 仅主命令“获取”
          ab -k -c 25 -n 2000 http://192.168.1.113:3001/api/v1/filters/3
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-28
            • 2012-07-29
            • 1970-01-01
            相关资源
            最近更新 更多