Sha256: d8ef36d1914d394327b840e3e7e8dd3b05da7d3a7f45b0f09a3ed03e3fed47ee
Contents?: true
Size: 1.83 KB
Versions: 6
Compression:
Stored size: 1.83 KB
Contents
require 'rack/lobster' def run(handler_name, n=1000, c=1) port = 7000 server = fork do [STDOUT, STDERR].each { |o| o.reopen "/dev/null" } case handler_name when 'EMongrel' require 'swiftcore/evented_mongrel' handler_name = 'Mongrel' when 'gem' # Load the current Thin gem require 'thin' handler_name = 'Thin' when 'current' # Load the current Thin version under /lib require File.dirname(__FILE__) + '/../lib/thin' handler_name = 'Thin' end app = Rack::Lobster.new handler = Rack::Handler.const_get(handler_name) handler.run app, :Host => '0.0.0.0', :Port => port end sleep 2 out = `nice -n20 ab -c #{c} -n #{n} http://127.0.0.1:#{port}/ 2> /dev/null` Process.kill('SIGKILL', server) Process.wait if requests = out.match(/^Requests.+?(\d+\.\d+)/) requests[1].to_i else 0 end end def benchmark(type, servers, request, concurrency_levels) send "#{type}_benchmark", servers, request, concurrency_levels end def graph_benchmark(servers, request, concurrency_levels) require '/usr/local/lib/ruby/gems/1.8/gems/gruff-0.2.9/lib/gruff' g = Gruff::Area.new g.title = "Server benchmark" servers.each do |server| g.data(server, concurrency_levels.collect { |c| print '.'; run(server, request, c) }) end puts g.x_axis_label = 'Concurrency' g.y_axis_label = 'Requests / sec' g.labels = {} concurrency_levels.each_with_index { |c, i| g.labels[i] = c.to_s } g.write('bench.png') `open bench.png` end def print_benchmark(servers, request, concurrency_levels) puts 'server request concurrency req/s' puts '=' * 42 concurrency_levels.each do |c| servers.each do |server| puts "#{server.ljust(8)} #{request} #{c.to_s.ljust(4)} #{run(server, request, c)}" end end end
Version data entries
6 entries across 6 versions & 1 rubygems