ry / ebb fork watch download tarball
public this repo is viewable by everyone
Description: web server
Homepage: http://ebb.rubyforge.org
Clone URL: git://github.com/ry/ebb.git
clean up benchmark scripts
Ryan Dahl (author)
2 months ago
commit  7897e7c5897e264fc0f80ee423ed393e606180cb
tree    d0c801f5a2950a895fb265fdbadb1395689afd78
parent  a791fbb16843b516dbb8e50aa9e4e007c391c927
...
20
21
22
 
 
 
 
23
24
25
...
20
21
22
23
24
25
26
27
28
29
0
@@ -20,6 +20,10 @@ end
0
 
0
 task(:wc) { sh "wc -l ruby_lib/*.rb src/ebb*.{c,h}" }
0
 
0
+task(:test => :compile) do
0
+ sh "ruby #{dir("benchmark/test.rb")}"
0
+end
0
+
0
 spec = Gem::Specification.new do |s|
0
   s.platform = Gem::Platform::RUBY
0
   s.summary = "A Web Server"
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,28 +0,0 @@
0
-#!/usr/bin/env ruby
0
-$: << File.expand_path(File.dirname(__FILE__))
0
-
0
-require 'server_test'
0
-
0
-trap('INT') { exit(1) }
0
-begin
0
- results = ServerTestResults.open('./concurrency_results.dump')
0
- $servers.each { |s| s.start }
0
- sleep 3
0
- [1,10,20,30,50,75,100].rand_each do |concurrency|
0
- $servers.rand_each do |server|
0
- if r = server.trial(:concurrency => concurrency)
0
- results << r
0
- else
0
- puts "error! restarting server"
0
- server.kill
0
- server.start
0
- end
0
- sleep 0.2 # give the other process some time to cool down?
0
- end
0
- puts "---"
0
- end
0
-ensure
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write('./concurrency_results.dump')
0
-end
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,36 +0,0 @@
0
-# supply the benchmark dump file as an argumetn to this program
0
-require 'rubygems'
0
-require 'google_chart'
0
-require 'server_test'
0
-
0
-class Array
0
- def avg
0
- sum.to_f / length
0
- end
0
- def sum
0
- inject(0) { |i, s| s += i }
0
- end
0
-end
0
-
0
-colors = %w{F74343 444130 7DA478 E4AC3D}
0
-max_x = 0
0
-max_y = 0
0
-results = ServerTestResults.open(ARGV[0] || 'concurrency_results.dump')
0
-all_m = []
0
-concurrency_chart = GoogleChart::LineChart.new('400x300',
0
- Time.now.strftime('%Y.%m.%d, 20 kbyte responses'),
0
- true)
0
-results.servers.each do |server|
0
- data = results.data(server, :concurrency).sort
0
- concurrency_chart.data(server, data, colors.shift)
0
- # data.delete_if { |d| d[0] > 100.kilobytes }
0
- x = data.map { |d| d[0] }.max
0
- y = data.map { |d| d[1] }.max
0
- max_x = x if x > max_x
0
- max_y = y if y > max_y
0
-end
0
-concurrency_chart.axis(:y, :range => [0,max_y])
0
-concurrency_chart.axis(:y, :labels => ['req/s'], :positions => [50])
0
-concurrency_chart.axis(:x, :range => [0,max_x])
0
-concurrency_chart.axis(:x, :labels => ['concurrency'], :positions => [50])
0
-puts concurrency_chart.to_url
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,31 +0,0 @@
0
-#!/usr/bin/env ruby
0
-$: << File.expand_path(File.dirname(__FILE__))
0
-
0
-require 'server_test'
0
-
0
-trap('INT') { exit(1) }
0
-dumpfile = 'request_results.dump'
0
-begin
0
- results = ServerTestResults.open(dumpfile)
0
- $servers.each { |s| s.start }
0
- sleep 3
0
- [0,5,7,10,15,18,20,23,25,30,40,45,50].map { |i| i.kilobytes }.rand_each do |size|
0
- $servers.rand_each do |server|
0
- if r = server.post_trial(size)
0
- results << r
0
- else
0
- puts "error!"
0
- server.kill
0
- sleep 0.5
0
- server.start
0
- sleep 2
0
- end
0
- sleep 2 # give the other process some time to cool down?
0
- end
0
- puts "---"
0
- end
0
-ensure
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write(dumpfile)
0
-end
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,34 +0,0 @@
0
-# supply the benchmark dump file as an argumetn to this program
0
-require 'rubygems'
0
-require 'google_chart'
0
-require 'server_test'
0
-
0
-class Array
0
- def avg
0
- sum.to_f / length
0
- end
0
- def sum
0
- inject(0) { |i, s| s += i }
0
- end
0
-end
0
-
0
-colors = %w{F74343 444130 7DA478 E4AC3D}
0
-max_x = 0
0
-max_y = 0
0
-results = ServerTestResults.open(ARGV[0] || 'request_results.dump')
0
-all_m = []
0
-response_chart = GoogleChart::LineChart.new('400x300', Time.now.strftime('%Y.%m.%d, c=10'), true)
0
-results.servers.each do |server|
0
- data = results.data(server, :size).sort.map { |d| [d[0]/1024.0, d[1]] }
0
- response_chart.data(server, data, colors.shift)
0
- data.delete_if { |d| d[0] > 50 }
0
- x = data.map { |d| d[0] }.max
0
- y = data.map { |d| d[1] }.max
0
- max_x = x if x > max_x
0
- max_y = y if y > max_y
0
-end
0
-response_chart.axis(:y, :range => [0,max_y])
0
-response_chart.axis(:y, :labels => ['req/s'], :positions => [50])
0
-response_chart.axis(:x, :range => [0,max_x])
0
-response_chart.axis(:x, :labels => ['kilobytes POSTed'], :positions => [50])
0
-puts response_chart.to_url
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,29 +0,0 @@
0
-#!/usr/bin/env ruby
0
-$: << File.expand_path(File.dirname(__FILE__))
0
-
0
-require 'server_test'
0
-
0
-trap('INT') { exit(1) }
0
-dumpfile = 'response_results.dump'
0
-begin
0
- results = ServerTestResults.open(dumpfile)
0
- $servers.each { |s| s.start }
0
- sleep 3
0
- [1,10,20,30,50,100,200].map { |i| i.kilobytes }.rand_each do |size|
0
- $servers.rand_each do |server|
0
- if r = server.trial(:size => size)
0
- results << r
0
- else
0
- puts "error! restarting server"
0
- server.kill
0
- server.start
0
- end
0
- sleep 0.2 # give the other process some time to cool down?
0
- end
0
- puts "---"
0
- end
0
-ensure
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write(dumpfile)
0
-end
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,33 +0,0 @@
0
-# supply the benchmark dump file as an argumetn to this program
0
-require 'rubygems'
0
-require 'google_chart'
0
-require 'server_test'
0
-
0
-class Array
0
- def avg
0
- sum.to_f / length
0
- end
0
- def sum
0
- inject(0) { |i, s| s += i }
0
- end
0
-end
0
-
0
-colors = %w{F74343 444130 7DA478 E4AC3D}
0
-max_x = 0
0
-max_y = 0
0
-results = ServerTestResults.open(ARGV[0] || 'response_results.dump')
0
-all_m = []
0
-response_chart = GoogleChart::LineChart.new('400x300', Time.now.strftime('%Y.%m.%d, c=50'), true)
0
-results.servers.each do |server|
0
- data = results.data(server, :size).sort.map { |d| [d[0]/1024.0, d[1]] }
0
- response_chart.data(server, data, colors.shift)
0
- x = data.map { |d| d[0] }.max
0
- y = data.map { |d| d[1] }.max
0
- max_x = x if x > max_x
0
- max_y = y if y > max_y
0
-end
0
-response_chart.axis(:y, :range => [0,max_y])
0
-response_chart.axis(:y, :labels => ['req/s'], :positions => [50])
0
-response_chart.axis(:x, :range => [0,max_x])
0
-response_chart.axis(:x, :labels => ['kilobytes served'], :positions => [50])
0
-puts response_chart.to_url
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
0
@@ -0,0 +1,66 @@
0
+#!/usr/bin/env ruby
0
+
0
+require File.dirname(__FILE__) + "/server_test"
0
+# supported servers: mongrel, emongrel, ebb, thin
0
+# use another name an a already open port for anything else
0
+usage = "e.g. server_bench response_size ebb:4001 mongrel:4002 other:4003"
0
+
0
+benchmark = ARGV.shift
0
+
0
+servers = []
0
+ARGV.each do |server|
0
+ name, port = server.split(':')
0
+ servers << ServerTest.new(name, port)
0
+end
0
+
0
+trials = {
0
+ 'response_size' => [0.1,1,5,7,10,15,18,20,23,25,30,40,45,50].map { |i|
0
+ bytes = (i*1024).to_i
0
+ [i, "ab -t 3 -q -c 50 http://0.0.0.0:PORT/bytes/#{bytes}"]
0
+ },
0
+ 'wait_fib' => [1,20,40,60,80,100].map { |c|
0
+ [c, "ab -t 3 -q -c #{c} http://0.0.0.0:PORT/periodical_activity/fibonacci/20}"]
0
+ },
0
+ 'post_size' => [0.1,1,5,7,10,15,18,20,23,25,30,40,45,50].map { |l|
0
+ size = (l * 1024).to_i
0
+ fn = "/tmp/ebb_post_trial_#{size}"
0
+ File.open(fn, 'w+') { |f| f.write("C"*size) } unless FileTest.exists?(fn)
0
+ [l, "ab -t 6 -q -c 50 -p #{fn} http://0.0.0.0:PORT/test_post_length}"]
0
+ },
0
+ 'concurrency' => [1,10,20,30,50,75,100].map { |c|
0
+ [c, "ab -t 3 -c #{c} http://0.0.0.0:PORT/bytes/1"]
0
+ }
0
+}
0
+
0
+unless trials.has_key? benchmark
0
+ puts("must specify valid benchmark: #{trials.keys.join(" or ")}")
0
+ exit 1
0
+end
0
+
0
+trap('INT') { exit(1) }
0
+dumpfile = "#{benchmark}.dump"
0
+begin
0
+ results = ServerTestResults.open(dumpfile)
0
+ servers.each { |s| s.start }
0
+ sleep 4
0
+ trials[benchmark].rand_each do |x, cmd|
0
+ servers.rand_each do |server|
0
+ result = server.trial(cmd)
0
+ if result.nil?
0
+ server.kill
0
+ sleep 0.5
0
+ server.start
0
+ sleep 2
0
+ else
0
+ result[:benchmark] = benchmark
0
+ result[:input] = x
0
+ results << result
0
+ end
0
+ end
0
+ puts "---"
0
+ end
0
+ensure
0
+ puts "\n\nkilling servers"
0
+ servers.each { |server| server.kill }
0
+ results.write(dumpfile)
0
+end
0
\ No newline at end of file
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,14 +0,0 @@
0
-require File.dirname(__FILE__) + "/server_test
0
-"
0
-# supported servers: mongrel, emongrel, ebb, thin
0
-# use another name an a already open port for anything else
0
-usage = "e.g. server_bench response_size ebb:4001 mongrel:4002 other:4003"
0
-
0
-bench_name = ARGV.shift
0
-
0
-servers = []
0
-ARGV.each do |server|
0
- name, port = server.split(':')
0
- servers << ServerTest.new(name, port)
0
-end
0
-
...
32
33
34
 
 
 
 
35
36
37
...
51
52
53
54
 
55
56
 
57
58
59
 
60
61
62
...
127
128
129
130
131
132
133
 
 
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
 
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
 
197
198
199
200
201
 
202
203
 
 
204
205
206
207
208
 
209
210
211
 
 
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
 
269
...
32
33
34
35
36
37
38
39
40
41
...
55
56
57
 
58
59
 
60
61
62
 
63
64
65
66
...
131
132
133
 
 
 
 
134
135
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
140
141
142
143
 
144
145
 
146
147
148
 
 
 
 
149
150
 
 
151
152
153
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
156
0
@@ -32,6 +32,10 @@ class ServerTestResults
0
     @results = results
0
   end
0
   
0
+ def benchmark
0
+ @results.first[:benchmark]
0
+ end
0
+
0
   def write(filename='results.dump')
0
     puts "writing dump file to #{filename}"
0
     File.open(filename, 'w+') do |f|
0
@@ -51,12 +55,12 @@ class ServerTestResults
0
     @results.map {|r| r[:server] }.uniq.sort
0
   end
0
 
0
- def data(server, what=:size)
0
+ def data(server)
0
     server_data = @results.find_all { |r| r[:server] == server }
0
- ticks = server_data.map { |d| d[what] }.uniq
0
+ ticks = server_data.map { |d| d[:input] }.uniq
0
     datas = []
0
     ticks.each do |c|
0
- measurements = server_data.find_all { |d| d[what] == c }.map { |d| d[:rps] }
0
+ measurements = server_data.find_all { |d| d[:input] == c }.map { |d| d[:rps] }
0
       datas << [c, measurements.avg]
0
     end
0
     datas
0
@@ -127,142 +131,25 @@ class ServerTest
0
     Rack::Handler::Thin.run(app, :Port => @port)
0
   end
0
   
0
- def trial(options = {})
0
- concurrency = options[:concurrency] || 50
0
- size = options[:size] || 20 * 1.kilobyte
0
- requests = options[:requests] || 500
0
+ def trial(ab_cmd)
0
+ cmd = ab_cmd.sub('PORT', @port)
0
     
0
- print "#{@name} (c=#{concurrency},s=#{size}) "
0
- $stdout.flush
0
- r = %x{ab -t 3 -q -c #{concurrency} http://0.0.0.0:#{@port}/bytes/#{size}}
0
- # Complete requests: 1000
0
-
0
- return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
- rps = $1.to_f
0
- if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
- end
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
- {
0
- :test => 'get',
0
- :server=> @name,
0
- :concurrency => concurrency,
0
- :size => size,
0
- :rps => rps,
0
- :requests => requests,
0
- :requests_completed => completed_requests,
0
- :time => Time.now
0
- }
0
- end
0
-
0
-
0
- def self.wait_scale
0
- [1,20,40,60,80,100]
0
- end
0
- def wait_trial(concurrency)
0
+ puts "#{@name} (#{cmd})"
0
     
0
- print "#{@name} (c=#{concurrency}) "
0
- $stdout.flush
0
- r = %x{ab -t #{3} -q -c #{concurrency} http://0.0.0.0:#{@port}/periodical_activity/fibonacci/20}
0
- # Complete requests: 1000
0
-
0
- return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
- rps = $1.to_f
0
- if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
- end
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
- {
0
- :test => 'get',
0
- :server=> @name,
0
- :concurrency => concurrency,
0
- :rps => rps,
0
- :requests_completed => completed_requests,
0
- :time => Time.now
0
- }
0
- end
0
-
0
-
0
- def post_trial(size = 1, concurrency = 10)
0
-
0
- print "#{@name} (c=#{concurrency},posting=#{size}) "
0
- $stdout.flush
0
-
0
- fn = "/tmp/ebb_post_trial_#{size}"
0
- unless FileTest.exists?(fn)
0
- File.open(fn, 'w+') { |f| f.write("C"*size) }
0
- end
0
-
0
- r = %x{ab -t 6 -q -c #{concurrency} -p #{fn} http://0.0.0.0:#{@port}/test_post_length}
0
+ r = %x{#{cmd}}
0
     
0
     return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
     rps = $1.to_f
0
     if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
+ requests_completed = $1.to_i
0
     end
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
+ puts " #{rps} req/sec (#{requests_completed} completed)"
0
+
0
     {
0
- :test => 'camping1',
0
- :server=> @name,
0
- :concurrency => concurrency,
0
- :size => size,
0
+ :server => @name,
0
       :rps => rps,
0
- :requests_completed => completed_requests,
0
- :time => Time.now
0
+ :requests_completed => requests_completed,
0
+ :ab_cmd => cmd
0
     }
0
   end
0
-
0
-end
0
-
0
-$servers = []
0
-$servers << ServerTest.new('emongrel', 4001) do
0
- require 'mongrel'
0
- require 'swiftcore/evented_mongrel'
0
- ENV['EVENT'] = "1"
0
- Rack::Handler::Mongrel.run(app, :Port => 4001)
0
-end
0
-
0
-$servers << ServerTest.new('ebb', 4002) do
0
- require File.dirname(__FILE__) + '/../ruby_lib/ebb'
0
- server = Ebb::Server.new(app, :port => 4002)
0
- server.start
0
-end
0
-
0
-$servers << ServerTest.new('mongrel', 4003) do
0
- require 'mongrel'
0
- Rack::Handler::Mongrel.run(app, :Port => 4003)
0
-end
0
-
0
-$servers << ServerTest.new('thin', 4004) do
0
- require 'thin'
0
- Rack::Handler::Thin.run(app, :Port => 4004)
0
-end
0
-
0
-
0
-benchmark_type = ARGV.shift
0
-servers_to_use = ARGV
0
-
0
-trap('INT') { exit(1) }
0
-dumpfile = "#{benchmark_type}.dump"
0
-begin
0
- results = ServerTestResults.open(dumpfile)
0
- $servers.each { |s| s.start }
0
- sleep 3
0
- ServerTest.send("#{benchmark_type}_scale").each do |s|
0
- $servers.rand_each do |server|
0
- if r = server.send("#{benchmark_type}_trial", s)
0
- results << r
0
- else
0
- puts "error! restarting server"
0
- server.kill
0
- server.start
0
- end
0
- sleep 0.2 # give the other process some time to cool down?
0
- end
0
- puts "---"
0
- end
0
-ensure
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write(dumpfile)
0
-end
0
+end
0
\ No newline at end of file
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,29 +0,0 @@
0
-#!/usr/bin/env ruby
0
-$: << File.expand_path(File.dirname(__FILE__))
0
-
0
-require 'server_test'
0
-
0
-trap('INT') { exit(1) }
0
-dumpfile = 'waiting_results.dump'
0
-begin
0
- results = ServerTestResults.open(dumpfile)
0
- $servers.each { |s| s.start }
0
- sleep 3
0
- [1,20,40,60,80,100].each do |c|
0
- $servers.rand_each do |server|
0
- if r = server.wait_trial(15, c)
0
- results << r
0
- else
0
- puts "error! restarting server"
0
- server.kill
0
- server.start
0
- end
0
- sleep 0.2 # give the other process some time to cool down?
0
- end
0
- puts "---"
0
- end
0
-ensure
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write(dumpfile)
0
-end
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
@@ -1,36 +0,0 @@
0
-# supply the benchmark dump file as an argumetn to this program
0
-require 'rubygems'
0
-require 'google_chart'
0
-require 'server_test'
0
-
0
-class Array
0
- def avg
0
- sum.to_f / length
0
- end
0
- def sum
0
- inject(0) { |i, s| s += i }
0
- end
0
-end
0
-
0
-colors = %w{F74343 444130 7DA478 E4AC3D}
0
-max_x = 0
0
-max_y = 0
0
-results = ServerTestResults.open(ARGV[0] || 'waiting_results.dump')
0
-all_m = []
0
-concurrency_chart = GoogleChart::LineChart.new('400x300',
0
- Time.now.strftime('%Y.%m.%d, waiting 2 seconds every 10 requests'),
0
- true)
0
-results.servers.each do |server|
0
- data = results.data(server, :concurrency).sort
0
- concurrency_chart.data(server, data, colors.shift)
0
- # data.delete_if { |d| d[0] > 100.kilobytes }
0
- x = data.map { |d| d[0] }.max
0
- y = data.map { |d| d[1] }.max
0
- max_x = x if x > max_x
0
- max_y = y if y > max_y
0
-end
0
-concurrency_chart.axis(:y, :range => [0,max_y])
0
-concurrency_chart.axis(:y, :labels => ['req/s'], :positions => [50])
0
-concurrency_chart.axis(:x, :range => [0,max_x])
0
-concurrency_chart.axis(:x, :labels => ['concurrency'], :positions => [50])
0
-puts concurrency_chart.to_url

Comments

    No one has commented yet.