我如何使用Ruby每秒执行一定数量的操作?

时间:2016-04-29 17:48:13

标签: ruby

我想用Ruby测试速率限制应用程序,我根据每秒的请求数量定义不同的行为。

例如,如果我看到每秒300或更多请求,我希望它以块响应。

但是我如何通过在Ruby中每秒生成300个请求来测试它?据我所知,基于CPU存在严格的限制,但如果我将数字保持在远低于该限制的范围内,我仍然会发送既超过阈值又保持低于阈值的内容?

仅循环N次并不能保证吞吐量。

2 个答案:

答案 0 :(得分:3)

快速而肮脏的方法是启动300个线程,每个线程每秒执行一次请求。更优雅的方法是使用Eventmachine之类的东西以所需的速率创建请求。使用正确的非阻塞HTTP库,它可以轻松生成该级别的活动。

您也可以尝试这些工具:

  • ab Apache基准测试工具,常见的许多系统。它非常善于滥用你的系统。
  • Seige进行负载测试。

答案 1 :(得分:0)

最小的自制软件解决方案如何:

OPS_PER_SECOND = 300
count = 0
duration = 10
start = Time.now

while true
  elapsed = Time.now - start
  break if elapsed >= duration
  delay = (count - (elapsed / OPS_PER_SECOND)) / OPS_PER_SECOND
  sleep(delay) if delay > 0
  do_request
  count += 1
end