動かざることバグの如し

殿、温めておいたバグがこちらでございます

Rubyの並列処理でWEBサイトの負荷テストを実行する

いわゆるWEBサイトのベンチマークApache Benchがいちばん有名だが、いかんせんインストールしてやらなきゃいけなくて面倒

Rubyでサクッと負荷テストしてみたかったので作ってみた

環境

コード

10並列で計1000リクエスト実行したい場合

require 'thread'
require "rest-client"

locks = Queue.new
10.times { locks.push :lock }
error_count = 0

Array.new(1000) do |i|
  Thread.new do
    lock = locks.pop
    print "#{i} "
    options = {
      method: :get,
      url: "http://example.com/",
      timeout: 2
    }
    begin
      RestClient::Request.execute(options)
    rescue => e
      error_count += 1
    end
    locks.push lock
  end
end.each(&:join)
puts
puts "ERROR_COUNT: #{error_count}"

これをtime bundle exec ruby bench.rbとかで実行すると、時間計測とエラー落ちの数を調べることができる