【问题标题】:Am I using ApacheBench correctly?我是否正确使用了 ApacheBench?
【发布时间】:2012-08-14 04:45:46
【问题描述】:

在视频控制器 - 显示动作中,我尝试了两种情况。第一个使用increment_counter,直接写入db:

Video.increment_counter(:views_count, @video.id)

第二种方法使用save方法。

@video.views_count = @video.views_count + 1
@video.save

在 ApacheBench 中,我会这样做:

ab -n 100 -c 10 http://127.0.0.1:3000vidoes/18

视频 ID 为 18。我确保在每次 ab 运行时通过Video.find(18).update_attribute(:views_count, 18) 重置views_count

在两种情况下运行 ApacheBench 后,views_count 始终保持在 100。我认为 increment_countersave 方法更准确,因为它直接写入数据库。

我的卧推是否正确?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 concurrency apachebench


    【解决方案1】:

    您使用这两种方法都得到正确答案的原因是您并没有真正在这里测试并行性。当 apachebench 触发 10 个并发请求时,您的 rails 服务器一次只处理其中一个。尝试以下方法之一来利用第二种情况中存在的竞争条件:

    • 启动多个 Rails 服务器并将它们放在负载平衡器后面。您可以对乘客执行此操作,或者使用 thin -s 4 之类的东西,然后将所有这些服务器放在 nginx 或 haproxy 实例后面。
    • 切换到使用避免 GIL 的线程解决方案,例如在 puma 下运行的 JRuby 或 rubinius

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2014-07-19
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多