- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望像其他许多人一样,测试“我的Web服务器可以处理多少个并发请求”。
通过使用ab
或siege
之类的工具,并通过代表真实生活使用情况的查询命中apache Web服务器/ mysql数据库/ php脚本,与真实生活相比,您获得的结果有多大代表性实际用户的使用情况?
我的意思是,例如,使用实用程序进行测试,所有流量都来自单个IP,而实际使用量却来自许多不同的IP地址?这说明了差异世界吗?
如果ab
说我的Web服务器每秒可以处理1000个请求,这是否可以直接转换为说Web服务器每秒可以处理来自实际用户的1000个请求?
我知道这是一个蓬松的区域,所以我能得到的具体答复越多越好。旧的“取决于”将无济于事:)
最佳答案
抱歉,但是“取决于”是最好的答案。
首先,回答这个问题最有价值的工具不是Ab或Siege或JMeter(我最喜欢的开源工具),而是电子表格。
系统可以处理的请求数取决于您首先遇到的瓶颈。这些瓶颈中的一些将是硬件/基础结构(带宽,CPU,负载平衡方案的有效性),一些将是“现成的”软件及其配置方式(例如,Apache提供静态文件的能力),以及软件(PHP脚本和数据库查询的运行效率)。某些瓶颈资源可能不受您的控制-例如,从中国访问时,大多数在欧洲或美国托管的网站访问速度都很慢。
我使用了电子表格来模拟用户旅程-这完全取决于您的特定情况,但是用户旅程可能是:
访问主页
点击“注册/登录”链接
注册为新用户
点击电子邮件中的“验证”链接
访问受限内容
大多数站点支持许多用户旅程-并且在任何时候,这些用户旅程之间的混合可能会发生很大的变化。
对于每个用户旅程,我然后评估访问者请求的性质-例如,“访问主页”可能是“下载20个静态文件和1个PHP脚本”,而“注册为新用户”可能需要“ 1个PHP脚本” ,但是具有相当复杂的数据库脚本集。
此过程以电子表格中的一组行结束,该行显示每种类型的请求数。为了精确起见,可能有必要将每个动态页面(PHP脚本)视作自己的请求,但是我通常会将所有静态资产汇总在一起。
这为您提供了基于大量假设的基准测试。现在,您可以创建代表“ 20%的新用户,50%的回头用户,仅10%的首页,20%的完整购买路线,20%的放弃篮子”的负载测试脚本或您想到的任何用户旅程。
创建一个包含旅程的负载测试脚本并运行它;理想情况下,可以从多个位置(从云提供商处运行Jmeter有几种廉价的方法)。测量响应时间,在10%以上的情况下,查看最慢请求的响应时间超出质量阈值的位置(通常建议3秒)。
尝试改变用户旅程之间的差异-例如,广告系列可能会带来许多新的注册。我通常建议至少3或4种不同的混合物。
如果用户旅程中的任何变化产生的结果都大大低于平均值(15%或更高),则可能是最坏的情况。
否则,将结果取平均值,您将以合理的确定度知道这是您可以支持的最少请求数。您可以测试的用户旅程变化越多,就越确定该数字是准确的。所谓“最少”,是指您可以合理地确定自己至少可以管理这么多用户。这并不意味着您最多可以处理这么多用户-细微的差别,但重要的一点!
在大多数Web应用程序中,瓶颈在于动态页面的生成-测试Apache提供静态文件的能力或托管提供商的带宽的能力很少。作为“我们已经忘记了什么”测试很好,但是通过测试PHP脚本,您将获得更多的价值。
在执行此操作之前,我建议您仅使用PHP文件来“搜索瓶颈”-我上面概述的过程不会告诉您瓶颈在哪里,而只是告诉您瓶颈在哪里。由于最有可能是PHP(当然还有您在PHP中所做的所有工作,例如调用数据库),因此对解决方案进行性能测试通常是个好主意。
您还应该使用Yslow之类的工具来确保优化了HTTP / HTML设置-为静态资产设置缓存标头会对带宽费用产生重大影响,并可能有助于提高最终用户的性能。 \
关于php - 负载测试的代表性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13970330/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!