fixed ebb_rails stopping
[ebb.git] / benchmark / server_bench
blob1545b623a09b02122927a6c4eec3782376975d6b
1 #!/usr/bin/env ruby
3 require File.dirname(__FILE__) + "/server_test"
4 # supported servers: mongrel, emongrel, ebb, thin
5 # use another name an a already open port for anything else
6 usage = "e.g. server_bench response_size ebb:4001 mongrel:4002 other:4003"
8 benchmark = ARGV.shift
10 servers = []
11 ARGV.each do |server|
12 name, port = server.split(':')
13 servers << ServerTest.new(name, port)
14 end
16 trials = {
17 'response_size' => [0.1,1,5,7,10,15,18,20,23,25,30,40,45,50].map { |i|
18 bytes = (i*1024).to_i
19 [i, "ab -t 3 -q -c 50 http://0.0.0.0:PORT/bytes/#{bytes}"]
21 'wait_fib' => [1,20,40,60,80,100].map { |c|
22 [c, "ab -t 3 -q -c #{c} http://0.0.0.0:PORT/periodical_activity/fibonacci/20"]
24 'post_size' => [0.1,1,5,7,10,15,18,20,23,25,30,35,37,40,45,50].map { |l|
25 size = (l * 1024).to_i
26 fn = "/tmp/ebb_post_trial_#{size}"
27 File.open(fn, 'w+') { |f| f.write("C"*size) } unless FileTest.exists?(fn)
28 [l, "ab -t 6 -q -c 50 -p #{fn} http://0.0.0.0:PORT/test_post_length"]
30 'concurrency' => [1,2,5,10,20,30,50,75,100].map { |c|
31 [c, "ab -t 3 -c #{c} http://0.0.0.0:PORT/bytes/1"]
35 unless trials.has_key? benchmark
36 puts("must specify valid benchmark: #{trials.keys.join(" or ")}")
37 exit 1
38 end
40 trap('INT') { exit(1) }
41 dumpfile = "#{benchmark}.dump"
42 begin
43 results = ServerTestResults.open(dumpfile)
44 servers.each { |s| s.start }
45 sleep 4
46 trials[benchmark].rand_each do |x, cmd|
47 servers.rand_each do |server|
48 result = server.trial(cmd)
49 if result.nil?
50 server.kill
51 sleep 0.5
52 server.start
53 sleep 2
54 else
55 result[:benchmark] = benchmark
56 result[:input] = x
57 results << result
58 end
59 end
60 puts "---"
61 end
62 ensure
63 puts "\n\nkilling servers"
64 servers.each { |server| server.kill }
65 results.write(dumpfile)
66 end