diff --git a/collects/web-server/bench/bench.ss b/collects/web-server/bench/bench.ss new file mode 100644 index 0000000000..f21fcc1b2d --- /dev/null +++ b/collects/web-server/bench/bench.ss @@ -0,0 +1,72 @@ +(module bench mzscheme + (require (lib "file.ss") + (lib "list.ss") + (lib "process.ss") + (lib "web-server.ss" "web-server") + (prefix files: (lib "dispatch-files.ss" "web-server" "dispatchers")) + (planet "csv.ss" ("neil" "csv.plt" 1 1))) + + (define data-path (collection-path "web-server" "bench" "data")) + (define port (make-parameter 9480)) + + (define *test-file* (make-temporary-file)) + (with-output-to-file *test-file* + (lambda () + (write (make-string 1024 #\a))) + 'truncate/replace) + + (define *data-file* (make-temporary-file)) + + (define server-cust (make-custodian)) + (define shutdown + (parameterize ([current-custodian server-cust]) + (serve #:port (port) + #:dispatch + (files:make #:url->path (lambda _ (values *test-file* empty)) + #:mime-types-path (build-path "/etc/httpd/mime.types"))))) + + (define before/s (current-memory-use server-cust)) + (define before (current-memory-use)) + + (define start (current-seconds)) + (define cmd (format "ab -c 10 -t 120 -e ~a http://localhost:~a/file" + (path->bytes *data-file*) + (port))) + (system cmd) + (define stop (current-seconds)) + + (define after/s (current-memory-use server-cust)) + (define after (current-memory-use)) + (collect-garbage) (collect-garbage) (collect-garbage) (collect-garbage) + (define after-gc/s (current-memory-use server-cust)) + (define after-gc (current-memory-use)) + + (shutdown) + (define shut (current-seconds)) + + (define response-percentiles + (map string->number + (rest + (call-with-input-file *data-file* + (lambda (ip) + (csv-map second ip)))))) + + (define data + `(benchmark (cmd ,cmd) + (timing (start ,start) + (stop ,stop) + (shutdown ,shut)) + (memory-usage + (mzscheme (before ,before) + (after ,after) + (after-gc ,after-gc)) + (server (before ,before/s) + (after ,after/s) + (after-gc ,after-gc/s))) + (response-times + ,response-percentiles))) + + (printf "~S~n" data) + + (with-output-to-file (build-path data-path (format "~a.ss" (number->string (current-seconds)))) + (lambda () (printf "~S~n" data)))) \ No newline at end of file diff --git a/collects/web-server/bench/data/1181686382.ss b/collects/web-server/bench/data/1181686382.ss new file mode 100644 index 0000000000..23536907e2 --- /dev/null +++ b/collects/web-server/bench/data/1181686382.ss @@ -0,0 +1 @@ +(benchmark (cmd "ab -c 10 -t 120 -e /tmp/mztmp1181686223570222294 http://localhost:9480/file") (timing (start 1181686228) (stop 1181686349) (shutdown 1181686382)) (memory-usage (mzscheme (before 18005184) (after 201042604) (after-gc 198771452)) (server (before 11677076) (after 11947464) (after-gc 11974392))) (response-times (2.0 5.0 6.0 6.0 7.0 7.0 8.0 8.0 9.0 9.0 9.0 10.0 10.0 11.0 11.0 11.0 12.0 12.0 13.0 13.0 13.0 14.0 14.0 15.0 16.0 16.0 16.0 17.0 17.0 18.0 19.0 19.0 20.0 20.0 21.0 22.0 22.0 23.0 24.0 24.0 25.0 26.0 26.0 27.0 28.0 29.0 29.0 30.0 30.0 31.0 32.0 33.0 33.0 34.0 35.0 36.0 36.0 37.0 38.0 39.0 39.0 40.0 40.0 41.0 42.0 42.0 43.0 44.0 45.0 46.0 47.0 48.0 49.0 50.0 50.0 51.0 52.0 53.0 54.0 56.0 57.0 58.0 59.0 60.0 61.0 63.0 64.0 66.0 67.0 69.0 71.0 73.0 76.0 79.0 82.0 86.0 91.0 99.0 120.0 278.0)))