这是一个做服务器负载测试的坏方法吗?

Car*_*ort 5 javascript php testing load

我正在开发一个PHP-MySQL Web应用程序,用于服务器负载测试的可用工具很麻烦且令人困惑.所以我想我会尝试这个,我想知道这是不是一个坏主意:

  • 添加页面生成时间和每页PHP-MySQL的输出
  • 使用jQuery,AJAX并memory_get_usage()每秒点击页面n次,记录时间/内存消耗.

这是Javascript和标记:

<script>
function roundNumber(num, dec) {
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    return result;
}

$(function(){

totalCount = 0;
i = 1;
totalTime = 0;
highest = 0;
memoryUsage = 0;

var hitsPerSecond = 1000;
var totalLimit = 100;

function testLoad(){


    if (totalCount <= totalLimit){

        $.get('/lp/user-page.php', function(data){
            $(data).filter('#page-generation-time').each(function(){
                totalTime += parseFloat($(this).text());
                $('.console').append('<p>('+i+') - Load time: '+$(this).text()+'</p>');
                            i++;
                            if (highest < $(this).text()){
                                highest = $(this).text();
                            }
                            $('.average').html('Average: '+roundNumber(totalTime/i, 5)+' - Highest: '+highest);
            });
            $(data).filter('#page-memory-usage').each(function(){
                memoryUsage = parseFloat($(this).text());
                $('.memory').html($(this).text());
            });


        });


    } else {
        clearInterval(testLoadInterval);
    }

    totalCount++;

};


var testLoadInterval = setInterval(function(){ testLoad(); }, 1000/hitsPerSecond);

});

</script>

<h2>Load Test</h2>
<div class="average"></div>
<div class="memory"></div>
<div class="console-container">
    <div class="console"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是一种非常愚蠢/不准确的负载测试方法吗?因为它似乎有它的优点:

  • 重量轻,易于实施.
  • 使用真实的浏览器加载整个页面.
  • 跟踪平均页面加载时间并在浏览器中记录结果.

但我真的没有任何参考框架来知道我得到的数字是否正确.感谢任何能告诉我我是否完全错误的人,以及是否有比jMeter更友好的用户.

UPDATE

不要将其用作服务器负载测试的方法.它不会给你一个准确的阅读.

使用上面的代码,我能够以"1,000"加载到服务器一秒钟,几乎没有问题.在尝试使用ApacheBench之后,我发现这绝不是对现实的反映.

使用ApacheBench,我能够通过使用40(!)并发连接点击应用程序来破坏服务器.

显然,我正在重写应用程序的一部分,以便在任何可能的地方使用缓存的HTML.

所以,回答我自己的问题,是的,这是进行服务器测试的一种不好的方法.

Wil*_*ing 6

这不是最糟糕的想法,但是在评论中提到它有一些问题.

你肯定会遇到的一个问题是缓存.只需确保在您使用的任何浏览器中关闭缓存.注意:我在关闭Chrome缓存时遇到了一些问题,Chrome仍然坚持提供缓存内容,因此请注意这一点.

除了缓存之外,这不是最准确的做事方式.尽管它确实模拟了真正的浏览器加载,但它只模拟一个连接.这基本上模拟了一个用户刷新该单页的次数,不是很准确.

对于并发连接,我肯定会使用apache替换它.就像是

ab -n 1000 -c 10 http://www.your_url.com/
Run Code Online (Sandbox Code Playgroud)

根据您的服务器更改这些数字.该示例将一次运行1000个请求10.

如果你想从你的javascript基准测试中检查数字的"准确性",你可以做的一件事是运行apache bench并获得一些基线的无浏览器数量估计,然后运行你的基准测试脚本,看看结果有多接近.

另一个很棒的工具是Siege.安装起来并不是很困难,如果你真的想要准确地测试性能,那么它是值得的.但是,如果你正在寻找一些用户友好的东西,它可能不会起来.

Charles可以使用另一个具有良好界面的潜在工具

它并不是真的设计用于负载测试,但它确实有一个功能,你可以运行重复的并发请求(类似于apache工作台),它有一个漂亮的接口.

有很多选择,但它们可能不够用户友好,所以我不会详细介绍

一个好的付费(他们给你一些试运行,然后收费)我过去使用的选项是LoadImpact

如果您想进行任何非常重要的测试,它会有点昂贵,但它会模拟并发浏览器加载,并允许您为模拟用户编写"路径",以便轻松地通过您的站点.如果您正在寻找具有相对较高精度的非常用户友好的解决方案,我肯定会推荐它们(如果您有现金).

另一个潜在的付费解决方案是CapCal

我对他们并不是很了解.看起来他们也可能有某种免费试用版.