Java AIO (NIO.2) vs NodeJS

I just installed OpenJDK 7 on Ubuntu 10.04 LTS under VirtualBox (one core, 256 MB). I wanted to run a quick test to see how the new JDK7 Async channel APIs were performing in comparison with node. A simple test of a hello world running on a single core shows that the JVM truly has what it takes to be the best runtime for network servers. Most notably, compare the distribution of response times, especially at 99%. The advantage the JVM is showing might be enough to comfortably fit Rhino onto it.

Here are the numbers from Apache benchmark. First, Java AIO (build b127):

brunofr@ubuntu-vm:~$ ab -n 30000 -c 300 http://127.0.0.1:8080/
Concurrency Level:      300
Time taken for tests:   4.908 seconds
Complete requests:      30000
Requests per second:    6112.65 [#/sec] (mean)
Time per request:       49.079 [ms] (mean)
Transfer rate:          567.26 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%      8
  66%      8
  75%      9
  80%     11
  90%     12
  95%     13
  98%     14
  99%     18
 100%   4553 (longest request)

And then nodejs (from Ryan’s branch):

brunofr@ubuntu-vm:~$ ab -n 30000 -c 300 http://127.0.0.1:8124/
Concurrency Level:      300
Time taken for tests:   8.140 seconds
Complete requests:      30000
Requests per second:    3685.69 [#/sec] (mean)
Time per request:       81.396 [ms] (mean)
Transfer rate:          273.55 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%     35
  66%     44
  75%     50
  80%     53
  90%     60
  95%     65
  98%     75
  99%     86
 100%   3285 (longest request)

Note that right now AsynchronousChannel only has platform support on Linux and Solaris (you’ll get a java.lang.InternalError: platform not recognized running on OSX).

8 thoughts on “Java AIO (NIO.2) vs NodeJS

  1. Could you provide me with the source code you used to do this benchmark. I would like to recreate your benchmark with the latest version of both and check out the result.

    NodeJS HelloWorld is quite simple, but i’m not quite sure how to build the java part!

    Thanks

  2. Would you care to include a benchmark of a synchronous I/O version for Java on the same system?

    Just to see if async I/O is actually deserving the credit here.

Comments are closed.