这是进行服务器负载测试的坏方法吗?


Is this a bad way to do server load testing?

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

  • 将页面生成时间和memory_get_usage()添加到每个页面的输出
  • 使用jQuery, AJAX和setInterval每秒点击页面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>

这是一个令人难以置信的愚蠢/不准确的方式来做负载测试?因为它似乎有它的优点:

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

但是我真的没有任何参照系来知道我得到的数字是否正确。如果我完全错了,如果有比jMeter更用户友好的东西,感谢任何可以告诉我的人。

更新

不要将此作为服务器负载测试的方法。它不会给你一个准确的读数。

使用上面的代码,我可以用" 1000 "加载第二秒,几乎没有问题。在用ApacheBench做了同样的尝试后,我发现这根本不能反映现实。

使用ApacheBench,我能够通过使用40(!)并发连接来撞击应用程序而使服务器崩溃。

显然,我正在重写部分应用程序,以使用缓存的HTML。

那么,回答我自己的问题,,这是一个糟糕的方式来做服务器测试。

这并不是最糟糕的主意,但正如评论中提到的那样,它存在一些问题。

你肯定会遇到的一个问题是缓存。只要确保在你使用的浏览器中关闭缓存。注意:我遇到了一些问题,Chrome缓存被关闭,Chrome仍然坚持提供缓存的内容,所以要小心。

除了缓存之外,这并不是最准确的处理方法。尽管它模拟了真实的浏览器加载,但它只模拟了一个连接。这实际上模拟了一个用户多次刷新同一个页面,不是很准确。

我肯定会使用apache bench在这只是为了并发连接。就像

ab -n 1000 -c 10 http://www.your_url.com/

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

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

另一个伟大的工具是围攻。它的安装并不困难,如果您真的想要准确地测试性能,它是非常值得的。但是如果你正在寻找一些非常用户友好的东西,它可能不符合你的胃口。

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

它并不是为负载测试而设计的,但它确实有一个功能,你可以运行重复的并发请求(类似于apache bench),它有一个漂亮的界面。

还有很多选项,但它们可能对你不够友好,所以我就不详细介绍了

我过去使用过的一个好的付费(他们在收费之前给你一些试用)选项是LoadImpact

如果你想做任何真正繁重的测试,这有点昂贵,但它确实模拟了浏览器的并发负载,并允许你为模拟的用户编写一个"路径",让他们相当容易地通过你的网站。如果你正在寻找一个非常用户友好的解决方案,相对较高的准确性,我绝对推荐他们(如果你有现金)。

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

我真的不太了解他们。看起来他们可能也有一些免费的试用。