3

我正在尝试编写一个我试图衡量其效率的脚本。我有一些问题:-

  1. 对于小型应用程序,是否需要这种分析?还是我变得偏执?(假设大多数代码都相当高效/没有无限循环)
  2. 我应该以什么为基准?我应该与什么比较?
  3. 下面是我从 ab 得到的效率输出。这种方式是不是太离谱了?我设计这个应用程序的方向是错误的吗?有什么我应该注意的警告信号吗?
abs -n10000 -c100 http://localhost/testapp

这是 ApacheBench,版本 2.3
版权所有 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
授权给 Apache 软件基金会,http://www.apache.org/

对本地主机进行基准测试(请耐心等待)
已完成 1000 个请求
已完成 2000 个请求
已完成 3000 个请求
完成 4000 个请求
已完成 5000 个请求
已完成 6000 个请求
已完成 7000 个请求
已完成 8000 个请求
已完成 9000 个请求
已完成 10000 个请求
完成10000个请求


服务器软件:Apache/2.2.10
服务器主机名:本地主机
服务器端口:80

文档路径:/testapp
文档长度:525 字节

并发级别:100
测试时间:33.608 秒
完成请求:10000
失败的请求:5179
   (连接:0,接收:0,长度:5179,例外:0)
写入错误:0
总传输量:6973890 字节
传输的 HTML:5253890 字节
每秒请求数:297.55 [#/sec](平均)
每个请求的时间:336.080 [ms](平均值)
每个请求的时间:3.361 [ms](平均,所有并发请求)
传输速率:收到 202.64 [Kbytes/sec]

连接时间(毫秒)
              最小值平均值[+/-sd] 中值最大值
连接:0 1 1.5 0 109
处理:8 334 403.9 176 3556
等待:7 334 403.9 176 3556
总计:9 335 403.8 177 3556

特定时间内服务的请求百分比(毫秒)
  50% 177
  66% 296
  75% 415
  80% 519
  90% 842
  95% 1141
  98% 1615
  99% 1966
 100% 3556(最长请求)

我正在使用 PHP 编写脚本。在进一步测试中,我还发现如果我从我的 PHP 脚本中注释 MySQL 连接部分,“失败的请求”会变为 0。怎么了?如何降低这种失败率?

谢谢你,亚历克

4

5 回答 5

7

您期望 100 个并发请求吗?您希望在 30 秒内收到 10K 请求吗?

很高兴您可以运行此基准测试,但问问自己这意味着什么。考虑一下您将收到的实际流量。您确实需要一个问题来进行基准测试:

  • 我预计我的网站将拥有 3,000 名用户。
  • 我预计在高峰使用期间,其中 500 个将点击页面
  • 通常的用法是一分钟内 3 个请求:3 * 500 / 60 = ~ 25 req/sec
  • 我的站点可以处理 25 个请求/秒并做出响应(每个请求<200 毫秒)吗?

除非您处于网络的前百分之几,否则您的页面在现实生活中不会看到 100 个并发请求。为这种流量水平调整您的网站是没有意义的。要达到这些数字,您需要在架构级别做出设计妥协(数据库使用、缓存方法等:因此当数据库打开时您的失败次数)。

如果您只是想分析您的脚本,请使用xdebug来查找您的代码花费时间的地方。

于 2009-01-28T16:08:35.907 回答
1

我认为这看起来是一项很棒的工作。走开?我会说这远远超过标准。

一个问题是服务器上的负载将在生产中。您的脚本正在此服务器上触发请求,但如果您是开发实例上的唯一用户,您将看不到在处理典型生产负载时访问生产服务器时会发生什么。

如果是这种情况,您需要两个请求来源:一个代表您的新应用程序,另一个代表它将与资源竞争的生产流程。

您可以在基准软件中设置同时用户数吗?这个测试是不是一个接一个地发送 1000 个请求?让多个用户同时敲击服务器可能更现实。

你可以让发送间隔随机吗?这可能更能代表你的真实情况。

你能改变脚本使用的数据吗?它是否代表了它会被很好地使用的条件?

除此之外,我能提供的只有我的祝贺。看来你对我很认真。

于 2009-01-28T12:08:51.723 回答
1

您不应该收到任何失败的请求 - 您需要检查错误日志以了解它们失败的原因。

最有可能是 MySQL 连接不足,在这种情况下,您可以简单地调整您的服务器以允许更多的并发连接(如果您期望这样的流量)。

于 2009-01-28T12:25:50.690 回答
1

尝试使用xdebug来分析您的代码。 xdebug还将为您提供更好的屏幕错误和堆栈跟踪。

然后使用webgrind以漂亮的格式查看配置文件。

于 2009-01-28T15:12:47.827 回答
0

每个请求约 200 毫秒是一个比较常见的数字,在这个数字上,对于大多数用户来说,页面看起来“很快”。

于 2009-01-28T12:20:45.023 回答