Summary: `web-server` slows down a lot under high concurrenccy, which
the "More" tutorial web server doesn't. But "More" has bad 99%
latency, probably for GC reasons, which `web-server` doesn't. Any help
in understanding the behavior would be appreciated.

----

When I was at PolyConf two weeks ago, I ran a quick benchmark on a web
server created by `#lang web-server/insta`, and I discovered that it
did quite poorly under high concurrency. Here are some results from
`ab`:

10k requests, concurrency 2:

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      1
  98%      2
  99%      5
 100%      9 (longest request)

concurrency 1000:

Percentage of the requests served within a certain time (ms)
  50%    309
  66%    661
  75%   1114
  80%   1240
  90%   1648
  95%   3333
  98%   3864
  99%   3996
 100%   7575 (longest request)

We've gone from very fast to very slow here.

I then tried the web server constructed in the "More" tutorial, which
is much simpler:

concurrency 2:

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      2
  80%      2
  90%      4
  95%      5
  98%      6
  99%      6
 100%    435 (longest request)

Very similar, but a big spike at the longest request.

concurrency 1000:

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      3
  75%      4
  80%      4
  90%      5
  95%      6
  98%     19
  99%    748
 100%   4646 (longest request)

Now this is the surprising one: the median has barely budged, and the
98% is still quite good -- 200x better than `web-server/servlet`.  But
the longest request is again very slow.

Using the `gcstats` package, it looks like the `web-server` version is
allocating about 3.5 GB , while the More version allocates about 450
MB.

Strangely, the `web-server` version allocates much more in the
1000-concurrent setting than in the 2-concurrent setting.

Also, the longest request in More is significantly longer than the
_entire_ GC time for that program, and much longer than the max pause
time.

Overall, I find these results surprising in a bunch of ways, and can't
really explain them. But I think they indicate that a variety of
things could be improved.

Sam

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-dev/CAK%3DHD%2BbHhEOqhoBXouMpep4GhBdpz55C%2BfnHNxvHaEav9%3DznMA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to