【问题标题】:Efficiency, Benchmarking, Speed-testing, Performance效率、基准测试、速度测试、性能
【发布时间】:2010-10-03 23:53:56
【问题描述】:

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

  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。怎么了?如何降低这种故障率?

谢谢你, 亚历克

【问题讨论】:

    标签: php performance profiling benchmarking


    【解决方案1】:

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

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

    • 我预计我的网站将拥有 3,000 名用户。
    • 我预计在使用高峰期,有 500 人会点击该页面
    • 通常的用法是每分钟 3 个请求:3 * 500 / 60 = ~ 25 req/sec
    • 我的网站能否处理 25 个请求/秒并做出响应(每个请求

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      除此之外,我只能表示祝贺。看来你对我很周到。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          然后使用webgrind 以漂亮的格式查看个人资料。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2017-05-29
              • 2014-07-30
              • 1970-01-01
              • 2014-12-19
              • 2020-09-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多