我正在开发一个 PHP-MySQL
网络应用程序,用于服务器负载测试的可用工具既繁琐又令人困惑。所以我想我会试试这个,我想知道这是否是个坏主意:
- 在每个页面的输出中添加页面生成时间和
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 更用户友好的东西。
更新
不要将此用作服务器负载测试的方法。它不会为您提供准确的读数。
使用上面的代码,我能够以每秒“1,000”的负载命中服务器,几乎没有问题。在对 ApacheBench 进行同样的尝试后,我发现这绝不是现实的反射(reflect)。
使用 ApacheBench,我能够通过使用 40(!)个并发连接访问应用程序来使服务器崩溃。
显然,我正在重写应用程序的某些部分以尽可能使用缓存的 HTML。
因此,回答我自己的问题,是,这是进行服务器测试的糟糕方法。
最佳答案
这不是最糟糕的想法,但如评论中所述,它存在一些问题。
您肯定会遇到的一个问题是缓存。只要确保在您使用的任何浏览器中关闭缓存即可。注意:我遇到了一些问题,Chrome 缓存被关闭并且 Chrome 仍然坚持提供缓存的内容,所以要小心。
除了缓存之外,这并不是最准确的处理方式。即使它确实模拟了真实的浏览器负载,它也只是模拟了一个连接。这实质上模拟了一个用户多次刷新单个页面,不是很准确。
我肯定会在并发连接上使用 apache bench。有点像
ab -n 1000 -c 10 http://www.your_url.com/
根据您的服务器更改这些数字。该示例将一次运行 10 个 1000 个请求。
如果你想从你的 javascript 基准测试中检查数字的“准确性”,你可以做的一件事是运行 apache bench 并获得一些基线无浏览器数量估计,然后运行你的基准测试脚本并查看有多接近结果是。
另一个很棒的工具是 Siege .安装不是很困难,如果您真的想准确地测试性能,它是非常值得的。但是,如果您正在寻找对用户非常友好的东西,它可能不适合您。
您可以使用的另一个具有漂亮界面的潜在工具是 Charles
虽然它并不是真正为负载测试而设计的,但它确实具有可以运行重复并发请求的功能(类似于 apache bench)并且它具有漂亮的界面。
还有很多选择,但它们可能对您来说不够友好,所以我不会详细介绍
我过去使用的一个付费选项(他们会在向您收费之前给您进行几次试运行)是 LoadImpact
虽然如果您想进行任何真正繁重的测试,它有点贵,但它确实模拟并发浏览器加载并允许您为模拟用户编写“路径”脚本以相当轻松地访问您的站点。如果您正在寻找一种非常用户友好且准确性相对较高的解决方案,我绝对会推荐它们(如果您有现金)。
另一个潜在的付费解决方案是 CapCal
虽然我对他们了解不多。看起来他们也可能有某种免费试用。
关于php - 这是进行服务器负载测试的糟糕方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8244913/