Monday Apr 20, 2009

Application server performance on the Sun X2270 and X4170

On Monday April 20, Sun announced new application server benchmark results of 2925.18 SPECjAppServer2004 JOPS@Standard for the Sun Fire X2270 and Sun Fire X4170 platforms which can be found at

These new platforms used open source software components such as the OpenSolaris 2008.11 Operating System, Sun GlassFish V2.1 Application Server, and MySQL 5.1 Database Server to obtain this benchmark result. These software components can be freely downloaded from The Sun Java JDK 1.6.0_14 Performance Release is expected to be available for download June 2009.

This blog describes some details of the configuration.

Benchmark Configuration

The following diagram illustrates the configuration used to achieve this result:

Application Server Configuration Summary:

Sun Fire X2270
    \* 2x 2.93GHz Intel Xeon X5570
    \* 24 GB memory
    \* 1x 10GbE Dual Port NIC
    \* 2x Gbit NIC (onboard)
    \* 4x 500 GB SATA disks
    \* OpenSolaris 2008.11
    \* Sun GlassFish Enterprise Server V2.1
    \* JDK 1.6.0_14 Performance Release

Database Server Configuration Summary:

Sun Fire X4170
    \* 2x 2.93GHz Intel Xeon X5570
    \* 48 GB memory
    \* 1x 146Gb 10K RPM SAS disk
    \* 1x 10GbE Dual Port NIC
    \* 4x GBit NIC (onboard)
    \* 1x Dual Port FC/AL card
    \* 1x Sun StorageTek 2540 FC Array
    \* OpenSolaris 2008.11
    \* MySQL 5.1.30 Database Server

Application Server Configuration Details

The Sun Fire X2270 was configured using Solaris Containers into 4 separate zones to host 4 separate GlassFish application server instances. Solaris Containers is a virtualization technology in Solaris 10 and OpenSolaris which enable consolidation of multiple applications to improve system utilization and system efficiency.

The processes from two zones were bound to a processor set, consisting of 4 cores (1 chip) using the command "psrset -b PSET PID". The processes in the other 2 zones, were left to run on the remaining 4 cores on the second cpu chip and referred to as the default processor set.

The processor ID numbers for the processor set are obtained using the command "psrinfo -vp" and assigned to the processor set using the command "psrset -c [list of processor ids]". Each core in the Xeon X5570 supports 2 threads which are represented in Solaris as separate processor IDs. The list of running processes for each zone were obtained using the command "pgrep -z ZONENAME.

This binding technique of processes to a processor set in this way, enables the system to make efficient use of system resources for better performance. By running an application server process in a processor set consisting of 1 processor chip, the process is able to benefit by accessing memory local to the processor as well as the 8MB cache in the cpu chip.

To handle the network traffic between the driver systems and the 4 application server instances, a 10GbE dual port network card was configured in the Sun Fire X2270, where both ports were connected to the 10Gbit switch as shown in the diagram above. Two 1 Gbit network connections were configured on the X2270 system to handle the network traffic for the database transactions.

Each of the zones was configured with 2 separate virtual or logical network interfaces. Two zones shared one of 2 ports on the physical 10Gbit NIC and the other 2 zones shared the second port on the 10Gbit NIC for one of the virtual network interfaces for the transaction requests from the driver systems. On the database side, two zones shared separate 1 Gbit NICs for the other virtual network interface. The information to implement this network configuration is included in the full disclosure file for this benchmark result.

Each application server instance was configured to use the Sun Hotspot JVM JDK 1.6.0_14 Performance Release soon to be available for download from Each JVM was run in the FX scheduling class using the command "priocntl -e -c FX [command]" when starting the application server instance. This benchmark result used the 64-bit version of the JVM.

Tuning of the Sun GlassFish Enterprise Server v2.1 included sizing of the application server threads and JDBC connections, GlassFish parameters and JVM options. This information is also included in the benchmark report full disclosure file.

The following system and network tunings were applied:

System Tuning in /etc/system:
set ddi_msix_alloc_limit=8
set pcplusmp:apic_multi_msi_max=8
set pcplusmp:apic_msix_max=8
set pcplusmp:apic_intr_policy=1

Network Tuning:
ndd -set /dev/tcp tcp_conn_req_max_q 16384
ndd -set /dev/tcp tcp_conn_req_max_q0 16384
ndd -set /dev/tcp tcp_xmit_hiwat 524288
ndd -set /dev/tcp tcp_recv_hiwat 524288
ndd -set /dev/tcp tcp_naglim_def 1

Additional details on tuning options can be found at:

Database Server Configuration Details:

The Sun X4170 was configured with MySQL 5.1.30 database server which is a multi-threaded single process and run in the FX scheduling class using the command "priocntl -s -c FX -i pid [process ID of mysqld]".

The database storage consisted of a Sun StorageTek 2540 FC array and was configured to host the database files and transaction logs using the ZFS filesystem.

Configuration and tuning parameters for the MySQL 5.1.30 database were implemented using the file /etc/my.cnf which is included in the benchmark disclosure form.

Two of the 4 onboard network controllers on the X4170 were connected directly to the application server for the database transactions. The Sun X4170 used the same system and network tunings as the application server listed above.

The database system also acted as a DNS server, to enable the workload to be distributed across the four application server instances using round-robin DNS.

Benchmark Description:

SPECjAppServer2004 (Java Application Server) is a multi-tier benchmark for measuring the performance of Java 2 Enterprise Edition (J2EE) technology-based application servers. SPECjAppServer2004 is an end-to-end application which exercises all major J2EE technologies implemented by compliant application servers as follows:
    \* The web container, including servlets and JSPs
    \* The EJB container
    \* EJB2.0 Container Managed Persistence
    \* JMS and Message Driven Beans
    \* Transaction management
    \* Database connectivity
Moreover, SPECjAppServer2004 also heavily exercises all parts of the underlying infrastructure that make up the application environment, including hardware, JVM software, database software, JDBC drivers, and the system network. The primary metric of the SPECjAppServer2004 benchmark is jAppServer Operations Per Second (JOPS) which is calculated by adding the metrics of the Dealership Management Application in the Dealer Domain and the Manufacturing Application in the Manufacturing Domain. There is NO price/performance metric in this benchmark.

Disclosure Statement:

Sun Fire X2270 (2 chips, 8 cores) 2925.18 SPECjAppServer2004 JOPS@Standard.
SPEC, SPECjAppServer reg tm of Standard Performance Evaluation Corporation.
Results from as of 4/20/09.


Kevin Kelly


« July 2016