Since U.S. based Oracle employees don’t get President’s Day off, Anthony and I decided to deploy some new changes while everyone is off enjoying their day off. Actually, that’s not true, we deployed the new Mix changes early Sunday morning. What should have taken 10 minutes lasted 2 hours — it was a big release.
We applied a ton of goodness on this latest update. Under the hood, we upgraded to JRuby 1.1RC2 (which was just recently released (on Saturday!) — yeah, we’re blazing trails here. We also upgraded a bunch of underlying libraries like ActiveRecord-JDBC, JREXML, Goldspike and a few others. The JRuby 1.1RC2 upgrade was a big boost in performance. Last week, I spent some time running some Apache Bench tests on my MacBook Pro (2.4 GHz/4Gb mem) and saw some AMAZING numbers. Here’s a summary:
After running Apache Bench with 1000 requests (for my profile page) with a concurrency level of 100 (ab -n 1000 -c 100), I get these numbers:
Server Software: Oracle Server Hostname: localhost Server Port: 8888Document Path: /user_profiles/10023-rich-manalang Document Length: 100 bytes Concurrency Level: 100 Time taken for tests: 8.920769 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Non-2xx responses: 1000 Total transferred: 549000 bytes HTML transferred: 100000 bytes Requests per second: 112.10 [#/sec] (mean) Time per request: 892.077 [ms] (mean) Time per request: 8.921 [ms] (mean, across all concurrent requests) Transfer rate: 60.08 [Kbytes/sec] received
One thing to remember with these numbers… I ran this test on my laptop. Yes, I know what you’re saying… my laptop kicks your laptop’s arse. Regardless, these numbers look very good — here are a different set of stats for comparison. For those interested, my Rails app was configured with the Goldspike default of 4 JRuby processes max-active and 2 min-idle. I ran these against Oracle OC4J 10g, but the numbers look the same with Jetty and Glassfish. Charles Nutter one of the guys behind JRuby has a great write up on what’s next for JRuby. It’s a great read if you’re considering JRuby for your next project.
Ok… so, for those who don’t care about the guts that run Mix, here’s a list of the other changes we’ve applied:
- New logged in homepage — this slick new home page is smart. It delivers you topics that are relevant to you based on the tags and products you’ve specified on your profile.
- New post image identifiers — Jake didn’t like my handcrafted vote box from the last release (he said it looked like a Kleenex box… bastard), so I switched to the more standard “Vote” button. I hope we don’t offend any non-“red-white-blue” users — if we do, sound off in the comments. Here are the three post images… can you guess which is for which?
- More feeds! — Anthony’s added more feeds. Anywhere you see that little orange button, click on it to subscribe to the feed for that view.
- Groups you may be interested in — Anthony whipped up a nice feature that looks at the tags and products you specified on your profile and matches it with groups you may want to be a part of.
We’re not stopping there. Justin K and his crew have lots of features they want… so, we’ll be busy with that and lots of other enhancements in the next few weeks. If you haven’t done so, get in the Mix. Oh, and if you have a feature you absolutely want, sound off in the comments or, better yet, put in an idea in the Mix group.
Hi Rich,
great to see Mix evolving!
A question about the performance tests. A 100 byte big profile page? You seem to have a very very small one, mine is at least 16 KB big and yours on the production system is also 31 KB big. I think that’s more the size which is normally served for a web page and would be more appropriate for a benchmark.
Greetings
Patrick
Hi Rich,
great to see Mix evolving!
A question about the performance tests. A 100 byte big profile page? You seem to have a very very small one, mine is at least 16 KB big and yours on the production system is also 31 KB big. I think that’s more the size which is normally served for a web page and would be more appropriate for a benchmark.
Greetings
Patrick
There’s definitely something a bit odd about those numbers. As Patrick mentions, only 100 bytes? Also, 1000 non-2xx responses? Isn’t this just a redirect? I can’t remember if ApacheBench will follow those (if it does, you’re good!)
There’s definitely something a bit odd about those numbers. As Patrick mentions, only 100 bytes? Also, 1000 non-2xx responses? Isn’t this just a redirect? I can’t remember if ApacheBench will follow those (if it does, you’re good!)
@patrick, @peter, you’re right. Looks like that’s a redirect. I’ll test again with the redirect turned off.
@patrick, @peter, you’re right. Looks like that’s a redirect. I’ll test again with the redirect turned off.
@patrick, @peter, I ran my tests against a different page within the app (for some reason, AB isn’t taking the cookies I pass to it so instead I’m pointing it to a page that I was able to unsecure easily). The numbers have come down quite a bit:
Benchmarking localhost (be patient)
Finished 625 requests
Server Software: Oracle
Server Hostname: localhost
Server Port: 8888
Document Path: /feedback/new
Document Length: 6166 bytes
Concurrency Level: 4
Time taken for tests: 20.16816 seconds
Complete requests: 625
Failed requests: 513
(Connect: 0, Length: 513, Exceptions: 0)
Write errors: 0
Total transferred: 4056606 bytes
HTML transferred: 3861294 bytes
Requests per second: 31.22 [#/sec] (mean)
Time per request: 128.108 [ms] (mean)
Time per request: 32.027 [ms] (mean, across all concurrent requests)
Transfer rate: 197.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 16
Processing: 35 127 119.1 105 1404
Waiting: 31 126 119.1 104 1403
Total: 35 127 119.1 105 1404
Percentage of the requests served within a certain time (ms)
50% 105
66% 122
75% 138
80% 146
90% 172
95% 266
98% 536
99% 716
100% 1404 (longest request)
@patrick, @peter, I ran my tests against a different page within the app (for some reason, AB isn’t taking the cookies I pass to it so instead I’m pointing it to a page that I was able to unsecure easily). The numbers have come down quite a bit: