Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是一种不好的服务器负载测试方法吗?_Php_Javascript_Testing_Load - Fatal编程技术网

Php 这是一种不好的服务器负载测试方法吗?

Php 这是一种不好的服务器负载测试方法吗?,php,javascript,testing,load,Php,Javascript,Testing,Load,我正在开发一个phpmysqlweb应用程序,用于服务器负载测试的可用工具既麻烦又混乱。所以我想试试这个,我想知道这是不是个坏主意: 将页面生成时间和memory\u get\u usage()添加到每个页面的输出中 使用jQuery、AJAX和setInterval每秒点击页面n次,记录时间/内存消耗 以下是Javascript和标记: <script> function roundNumber(num, dec) { var result = Math.round(n

我正在开发一个
phpmysql
web应用程序,用于服务器负载测试的可用工具既麻烦又混乱。所以我想试试这个,我想知道这是不是个坏主意:

  • 将页面生成时间和
    memory\u get\u 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>

函数轮号(num,dec){
var result=Math.round(num*Math.pow(10,12月))/Math.pow(10,12月);
返回结果;
}
$(函数(){
totalCount=0;
i=1;
总时间=0;
最高=0;
memoryUsage=0;
var hitsPerSecond=1000;
var Totalimit=100;
函数testLoad(){

如果(totalCount这不是最糟糕的想法,但正如评论中提到的,它存在一些问题

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

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

我肯定会使用ApacheBench来实现并发连接

ab -n 1000 -c 10 http://www.your_url.com/
根据您的服务器更改这些数字。该示例将一次运行1000个请求10

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

另一个很好的工具是。安装起来并不困难,如果你真的想准确地测试性能,它是很值得的。但是如果你正在寻找一种非常用户友好的工具,它可能不适合你

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

虽然它不是为负载测试而设计的,但它确实有一个功能,可以运行重复并发请求(类似于ApacheBench),并且它有一个漂亮的接口

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

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

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

另一个可能的付费解决方案是


不过我对它们了解不多。看起来它们可能也有某种免费试用。

明显的潜在问题:GET查询可以缓存,所以你可能只是“紧张”只需点击一次服务器,然后就可以进行纯浏览器操作。这取决于您的服务器设置,这是测试单个Web服务器的一个好方法,但当在负载平衡器后面运行多个服务器时,如果您有IP固定,则不会给出非常准确的结果。基准测试工具旨在模拟多用户环境其中JavaScript是一个单用户环境。不是真正的苹果对苹果的比较。(相关)这比
攻城更简单http://yourwebsite.com/lp/user-page.php
?Jmeter是另一个很好的免费工具,如果您有权使用它,Visual Studio负载测试非常出色,但需要许可证。是的,Jmeter确实是一个很好的工具,但从他的问题来看,他似乎已经使用过它。我从未尝试过Visual Studio Load测试,它只对Windows服务器运行测试吗?@WilliamKing,谢谢你的输入。我将在关闭缓存后试用Apache Bench,看看数字有多大差异。我还将试一试。@WilliamKing-差点忘了;Apache Bench能模拟cookie吗?用户必须登录才能加载他们的页面。@CarterFort是的,它是c安,恐怕我不能对此给出太多的见解,因为我只使用过一次。请在这里阅读更多内容: