For background information on VolanoMark™ and its download locations, please see our Benchmarks page. Since the server side of the VolanoMark benchmark is our VolanoChat server, these test results help our customers choose the best Java virtual machine for their environment. VolanoMark is a pure Java server benchmark characterized by long-lasting network connections and high thread counts. The VolanoMark benchmark creates client connections in groups of 20 and measures the time required by the clients to take turns broadcasting a set of messages to the group. At the end of the test, it reports a score as the average number of messages transferred by the server per second. All tests ran identical copies of VolanoMark 2.1.2 on identical hardware.
Bug Id 4075058, "java.io: Add support for non-blocking I/O," explains why you need lots of threads to handle dedicated connections to a pure Java server. JSR 51, "New I/O APIs for the Java Platform," explains how Sun is addressing the problem starting with Java version 1.4.
The performance test was executed with the following commands on a local loopback connection, using the heap size options shown below where possible. The operating system was rebooted before each set of tests for a particular Java virtual machine. The client benchmark ran four times, with the final score as the average of the last three results. The server side was not restarted before each run of the client benchmark.
java -Xms8m -Xmx64m COM.volano.Main
java -Xms8m -Xmx64m COM.volano.Mark -count 100
The network scalability test was executed with the following commands over a 100-Mbps Ethernet cross-over cable connection, using the heap and stack size options shown below where possible. The operating systems on both sides were rebooted before each set of tests for a particular Java virtual machine. The VolanoMark server was not restarted between client test runs.
java -Xms8m -Xmx256m -Xss32k COM.volano.Main
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 50
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 100
...
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 300
I ran the TowerJ network test with the default maximum heap size of 4 gigabytes, since TowerJ allocates the 32-kilobyte stacks onto the Java heap in addition to the other Java objects. TowerJ needs an extra 375 megabytes on the Java heap due to this design. The other Java VMs require this storage as well, but allocate it outside the heap.
The server machine under test is a Dell OptiPlex GXpro with a 200-MHz Intel Pentium Pro processor, 256 kilobytes L2 cache, 320 megabytes ECC EDO RAM, a 3Com EtherLink XL 10/100 PCI TX NIC (3C905B-TX), and Phoenix ROM BIOS PLUS Version 1.10 A10.
Note that this is not a hardware test but rather a test of the relative performance and network scalability of these Java platforms running VolanoMark. We continue to use a 200 MHz Intel Pentium Pro so that you can compare these results with our previous Volano Reports and so that we can drive the system with a much more powerful processor on the client side of the network scalability tests.
With the exception of Sun 1.3.1 on Solaris, the maximum number of concurrent connections shown in Figure 2 is due to architectural constraints rather than processor speed or the actual amount of memory on the system.
The client side driving the network tests is a Dell OptiPlex GX1 with a 500-MHz Intel Pentium III processor, 512 kilobytes L2 cache, 384 megabytes ECC SDRAM, a 3Com EtherLink XL 10/100 PCI TX NIC (3C905B-TX), and Dell OptiPlex GX1 500L+ BIOS Revision A08. The client test driver was executed under the Sun J2SE 1.3.0_02 HotSpot Server VM using Solaris 8 (6/00).
Note that the client side must be a much more powerful system than the server side since it simulates up to 6,000 clients on just one machine and must drive the server side at its maximum speed.
The following Unix shell scripts and Windows batch files were used for the loopback performance tests with 200 concurrent connections. For a sleep function, the Windows batch files used sleep.java.
The following Unix shell scripts and Windows batch files were used for the network scalability tests with 1,000 through 6,000 concurrent connections.
FreeBSD ppro 4.2-RELEASE FreeBSD 4.2-RELEASE #0: Mon Nov 20 13:02:55 GMT 2000 jkh@bento.FreeBSD.org:/usr/src/sys/compile/GENERIC i386
Contents of /etc/sysctl.conf
:
# Increase file descriptor limits from their defaults of 1064. kern.maxfiles=16384 # System-wide limit kern.maxfilesperproc=8192 # Per-process limit
Microsoft Windows 2000 Service Pack 2 [Version 5.00.2195]
Optimized performance for background services (rather than applications) under Start, Settings, Control Panel, System, Advanced, Performance Options, Application response. This change specifies that all programs receive equal amounts of processor resources.
Applied all updates as of May 28, 2001, to get the following Linux kernel and Glibc versions for all but the TowerJ and JRockit tests:
Red Hat Linux release 7.1 (Seawolf) Linux ppro.sf.volano.net 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown glibc-2.2.2-10
For the TowerJ 3.8.1 and JRockit 3.0.0 tests, applied all updates as of December 10, 2001, to get the following Linux kernel and Glibc versions:
Red Hat Linux release 7.1 (Seawolf) Linux ppro.sf.volano.net 2.4.9-12 #1 Tue Oct 30 18:33:49 EST 2001 i686 unknown glibc-2.2.4-19
Added to /etc/pam.d/login
:
session required /lib/security/pam_limits.so
Added to /etc/security/limits.conf
:
* soft nofile 1024 * hard nofile 8192
Added latest recommended patch cluster dated May 23, 2001.
Solaris 8 6/00 s28x_u1wos_08 INTEL SunOS ppro 5.8 Generic_108529-08 i86pc i386 i86pc
Added to /etc/system
:
set rlim_fd_max = 8192 set rlim_fd_cur = 1024
java version "1.3.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0) Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cx130-20010502 (JIT enabled: jitc))
java version "1.3.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0) Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cn130-20010329 (JIT enabled: jitc))
TowerJ Compiler (version 3.8.1.0 (Tower JRE 1.3.1) x86-linux) Java version "1.3.1-internal"
Used the TowerJ project files
Main.tj
and
Mark.tj
.
Excelsior JET v2.1 Evaluation Version (c) Excelsior 1997,2001 Java vendor: Sun Microsystems Inc. Java vendor URL: http://www.excelsior-usa.com/ Java version: 1.3.1_01
Used the JET project files
Main.prj
and
Mark.prj
.
java version 1.3.1_dax.appeal.se-20011120-1857 Java(TM) 2 Runtime Environment, Standard Edition (build "1.3.1_dax.appeal.se-20011120-1857") JRockit Virtual Machine (build 3.0.0-dax.appeal.se-20011120-1610)
Microsoft (R) Command-line Loader for Java Version 5.00.3802 Copyright (C) Microsoft Corp 1996-2000. All rights reserved.
JRockit build 2.0.7-excelsior80, Thin Threads, Generational Stop & Copy Garbage Collector, started. java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) JRockit(tm) Virtual Machine (build 2.0.7-excelsior80, Thin Threads)
java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Server VM (build 1.3.1-b24, mixed mode)
java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Server VM (build 1.3.1-b24, mixed mode)
java version "1.2.2" Solaris VM (build Solaris_JDK_1.2.2_08, native threads, sunwjit)
java version "1.3.0" Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS) Classic VM (build Blackdown-1.3.0-FCS, green threads, OpenJIT)
java version "1.3.0" Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS) Classic VM (build Blackdown-1.3.0-FCS, green threads, OpenJIT)
Ran using the Linux emulation package:
Linux ppro 2.2.12 FreeBSD 4.2-RELEASE #0: Mon Nov 20 13:02:55 GMT 2000 jkh@ben i386 unknown Glibc 2.1.2
Modified /usr/local/j2sdk1.3.0/bin/.java_wrapper
as
follows:
$ diff .java_wrapper.old .java_wrapper 36,37c36,37 < link=`expr "$ls" : '.*-> \(.*\)$'` < if expr "${link}" : '/' > /dev/null; then --- > link=`/usr/compat/linux/usr/bin/expr "$ls" : '.*-> \(.*\)$'` > if /usr/compat/linux/usr/bin/expr "${link}" : '/' > /dev/null; then
java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Server VM (build 1.3.1-b24, mixed mode)