Php 负载测试的代表性如何?

Php 负载测试的代表性如何?,php,mysql,apache,unix,Php,Mysql,Apache,Unix,我希望测试,就像我确信的许多其他测试一样,“我的web服务器可以同时处理多少个请求” 通过使用诸如ab或seake之类的工具,并使用表示实际使用情况的查询来访问apache web服务器/mysql数据库/php脚本,与实际用户实际使用情况相比,您得到的结果有多具有代表性 我的意思是,例如,使用一个实用程序进行测试,所有流量都来自一个IP,而实际使用量来自许多不同的IP地址?这能解释世界的不同吗 如果ab说我的web服务器每秒可以处理1000个请求,这是否可以直接转换为说web服务器每秒可以处理

我希望测试,就像我确信的许多其他测试一样,“我的web服务器可以同时处理多少个请求”

通过使用诸如
ab
seake
之类的工具,并使用表示实际使用情况的查询来访问apache web服务器/mysql数据库/php脚本,与实际用户实际使用情况相比,您得到的结果有多具有代表性

我的意思是,例如,使用一个实用程序进行测试,所有流量都来自一个IP,而实际使用量来自许多不同的IP地址?这能解释世界的不同吗

如果
ab
说我的web服务器每秒可以处理1000个请求,这是否可以直接转换为说web服务器每秒可以处理来自实际用户的1000个请求


我知道这是一个毛茸茸的地方,所以我得到的答复越具体、越直接越好。旧的“视情况而定”没有多大帮助:)

简短的回答是不,可能没有

ab
和friends在本地计算机上运行时,不会受到网络延迟/带宽阻塞的影响

此外,每个现实生活中的请求都需要不同级别的处理—数据库访问/加载、文件包含等


此外,所有这些都没有考虑到其他正在运行的后台进程的服务器负载。

为了获得接近真实的结果,我建议您分析典型的用户行为,创建一个url用户正在访问的
url文件,并随机延迟运行该文件。这个结果不能直接转移到生产enivromet,但它是您自己可以得到的最接近的结果。您也可以尝试测试web应用性能的web服务,但如果您需要复杂的测试,通常会支付这些服务的费用,但说“这取决于”并没有多大帮助,并不意味着唯一有效的答案不是“这取决于”。因为有点像

  • 事实:测试不是真实的使用
  • 事实:测试可以非常接近实际使用
  • 问题:你怎么知道它是不是真的
这取决于您如何处理请求。 对于许多应用程序来说,您的单一IP不会成为问题,因此这不是我首先担心的问题。但也可能是这样的:如果你为每个IP做一次复杂的统计(例如,将一些信息保存在一个你设计得不太好的表中),这意味着你在测试中只做一次,所以当真正的用户带着他们令人烦恼的不同IP出现时,你会很不开心

这取决于你的测试系统。 如果您所有的请求都来自一条慢行(可能是因为您正在处理所有这些请求而慢行),您将不会得到一个严肃的测试。基本上,如果您希望传入的流量超过测试系统的连接所能处理的流量。。你明白了。CPU使用率和类似情况也是如此

这取决于你的测试有多好。 例如,如果您的请求访问了所有页面,但您的用户只访问了一个特定页面,那么您显然会得到不同的结果。频率也是如此。如果你点击页面的顺序能让你充分利用缓存(查询缓存是一个棘手的问题,但也包括memcached、varnish等层),同样,你会过得很糟糕。你可以寻找的最简单的东西是你可以在攻城测试中设置的
延迟
,但是你可能需要考虑很多其他的事情

编写好的测试是很难的,而且你的测试越好,你就越接近。但您需要了解您的系统、用户和测试。“这要看情况了”真的没什么好说的了对不起,但“这要看情况了”是最好的答案

首先,回答这个问题最有价值的工具不是ab或Sakey或JMeter(我最喜欢的开源工具),而是电子表格

系统可以处理的请求数量取决于您首先遇到的瓶颈。其中一些瓶颈是硬件/基础设施(带宽、CPU、负载平衡方案的有效性),一些是“现成”的软件及其配置方式(例如,Apache提供静态文件的能力)和软件(PHP脚本和数据库查询的运行效率)。一些瓶颈资源可能不在您的控制之下-例如,大多数托管在欧洲或美国的网站在从中国访问时速度较慢

我使用了一个电子表格来模拟用户旅程-这完全取决于您的具体情况,但用户旅程可能是:

  • 浏览网页
  • 单击“注册/登录”链接
  • 注册为新用户
  • 单击电子邮件中的“验证”链接
  • 访问受限内容
大多数网站都支持许多用户旅行,而且在任何时候,这些用户旅行之间的混合可能会有很大的差异

对于每个用户旅程,我会评估访问者请求的性质——“访问主页”,例如,“下载20个静态文件和1个PHP脚本”,而“注册为新用户”可能需要“1个PHP脚本”,但数据库脚本集相当复杂

该过程以电子表格中的一组行结束,显示每种类型的请求数。为了精确起见,可能需要将每个动态页面(PHP脚本)视为它自己的请求,但我通常会将所有静态资产放在一起

这为您提供了一个基于一系列假设的测试基准。现在,您可以创建负载测试脚本,表示“20%的新用户、50%的返回用户、10%的仅主页、20%的完整购买路线、20%的放弃篮”或您想到的任何用户旅程

创建一个包含旅程的负载测试脚本并运行它;理想情况下,可以从多个位置运行Jmeter(有几种从云提供商运行Jmeter的廉价方法)。测量响应时间,并查看