type=page
status=published
title=Overview of {productName} Performance Tuning
next=tuning-apps.html
prev=preface.html
~~~~~~

= Overview of {productName} Performance Tuning

[[GSPTG00003]][[giekg]]


[[overview-of-glassfish-server-performance-tuning]]
== 1 Overview of {productName} Performance Tuning

You can significantly improve performance of the {productName}
and of applications deployed to it by adjusting a few deployment and
server configuration settings. However, it is important to understand
the environment and performance goals. An optimal configuration for a
production environment might not be optimal for a development
environment.

The following topics are addressed here:

* link:#abear[Process Overview]
* link:#abeat[Understanding Operational Requirements]
* link:#abeba[General Tuning Concepts]
* link:#abebd[Further Information]

[[abear]][[GSPTG00048]][[process-overview]]

=== Process Overview

The following table outlines the overall {productName} 7
administration process, and shows where performance tuning fits in the
sequence.

[[sthref4]][[gacmh]]

Table 1-1 Performance Tuning Roadmap

[options="header",]
|===
|Step |Description of Task |Location of Instructions
|1
|Design: Decide on the high-availability topology and set up {productName}.
a|link:../deployment-planning-guide/toc.html#GSPLG[
{productName} Deployment Planning Guide]

|2
|Capacity Planning: Make sure the systems have sufficient resources to perform well.
a|link:../deployment-planning-guide/toc.html#GSPLG[
{productName} Deployment Planning Guide]

|3
|Installation: Configure your DAS, clusters, and clustered server instances.
a|link:../installation-guide/toc.html#GSING[
{productName} Installation Guide]

|4
|Deployment: Install and run your applications.
Familiarize yourself with how to configure and administer the {productName}.
a|The following books:

* link:../application-deployment-guide/toc.html#GSDPG[
{productName} Application Deployment Guide]
* link:../administration-guide/toc.html#GSADG[
{productName} Administration Guide]

|5
|High Availability Configuration: Configuring your DAS, clusters, and
clustered server instances for high availability and failover
a|link:../ha-administration-guide/toc.html#GSHAG[
{productName} High Availability Administration Guide]

|6
a|Performance Tuning: Tune the following items:

* Applications
* {productName}
* Java Runtime System
* Operating system and platform

a|The following chapters:

* link:tuning-apps.html#abebe[Tuning Your Application]
* link:tuning-glassfish.html#abedn[Tuning the {productName}]
* link:tuning-java.html#abeia[Tuning the Java Runtime System]
* link:tuning-os.html#abeir[Tuning the Operating System and Platform]
|===


[[abeas]][[GSPTG00035]][[performance-tuning-sequence]]

==== Performance Tuning Sequence

Application developers should tune applications prior to production use.
Tuning applications often produces dramatic performance improvements.
System administrators perform the remaining steps in the following list
after tuning the application, or when application tuning has to wait and
you want to improve performance as much as possible in the meantime.

Ideally, follow this sequence of steps when you are tuning performance:

1. Tune your application, described in
link:tuning-apps.html#abebe[Tuning Your Application].
2. Tune the server, described in link:tuning-glassfish.html#abedn[Tuning
the {productName}].
3. Tune the Java runtime system, described in
link:tuning-java.html#abeia[Tuning the Java Runtime System].
4. Tune the operating system, described in
link:tuning-os.html#abeir[Tuning the Operating System and Platform].

[[abeat]][[GSPTG00049]][[understanding-operational-requirements]]

=== Understanding Operational Requirements

Before you begin to deploy and tune your application on the {productName}, it is important to clearly define the operational environment.
The operational environment is determined by high-level constraints and
requirements such as:

* link:#abeau[Application Architecture]
* link:#abeav[Security Requirements]
* link:#gkvjf[High Availability Clustering, Load Balancing, and Failover]
* link:#abeay[Hardware Resources]
* link:#abeaz[Administration]

[[abeau]][[GSPTG00154]][[application-architecture]]

==== Application Architecture

The Jakarta EE Application model, as shown in the following figure, is very
flexible; allowing the application architect to split application logic
functionally into many tiers. The presentation layer is typically
implemented using servlets and JSP technology and executes in the web
container.

[[GSPTG00001]][[gacmj]]


.*Figure 1-1 Jakarta EE Application Model*
image:img/appmodel.png["Jakarta EE Application Mode"]


Moderately complex enterprise applications can be developed entirely
using servlets and JSP technology. More complex business applications
often use Enterprise JavaBeans (EJB) components. The {productName}
integrates the Web and EJB containers in a single process. Local access
to EJB components from servlets is very efficient. However, some
application deployments may require EJB components to execute in a
separate process; and be accessible from standalone client applications
as well as servlets. Based on the application architecture, the server
administrator can employ the {productName} in multiple tiers, or
simply host both the presentation and business logic on a single tier.

It is important to understand the application architecture before
designing a new {productName} deployment, and when deploying a new
business application to an existing application server deployment.

[[abeav]][[GSPTG00155]][[security-requirements]]

==== Security Requirements

Most business applications require security. This section discusses
security considerations and decisions.

[[abeaw]][[GSPTG00080]][[user-authentication-and-authorization]]

===== User Authentication and Authorization

Application users must be authenticated. The {productName} provides a
number of choices for user authentication, including file-based,
administration, LDAP, certificate, JDBC, digest, PAM, Solaris, and
custom realms.

The default file based security realm is suitable for developer
environments, where new applications are developed and tested. At
deployment time, the server administrator can choose between the
Lighweight Directory Access Protocol (LDAP) or Solaris security realms.
Many large enterprises use LDAP-based directory servers to maintain
employee and customer profiles. Small to medium enterprises that do not
already use a directory server may find it advantageous to leverage
investment in Solaris security infrastructure.

For more information on security realms, see
"link:../security-guide/user-security.html#GSSCG00151[Administering Authentication Realms]" in {productName} Security Guide.

The type of authentication mechanism chosen may require additional
hardware for the deployment. Typically a directory server executes on a
separate server, and may also require a backup for replication and high
availability. Refer to the
http://www.oracle.com/us/products/middleware/identity-management/oracle-directory-services/index.html[Oracle
Java System Directory Server]
(`http://www.oracle.com/us/products/middleware/identity-management/oracle-directory-services/index.html`)
documentation for more information on deployment, sizing, and
availability guidelines.

An authenticated user's access to application functions may also need
authorization checks. If the application uses the role-based Jakarta EE
authorization checks, the application server performs some additional
checking, which incurs additional overheads. When you perform capacity
planning, you must take this additional overhead into account.

[[abeax]][[GSPTG00081]][[encryption]]

===== Encryption

For security reasons, sensitive user inputs and application output must
be encrypted. Most business-oriented web applications encrypt all or
some of the communication flow between the browser and {productName}.
Online shopping applications encrypt traffic when the user is completing
a purchase or supplying private data. Portal applications such as news
and media typically do not employ encryption. Secure Sockets Layer (SSL)
is the most common security framework, and is supported by many browsers
and application servers.

The {productName} supports SSL 2.0 and 3.0 and contains software
support for various cipher suites. It also supports integration of
hardware encryption cards for even higher performance. Security
considerations, particularly when using the integrated software
encryption, will impact hardware sizing and capacity planning.

Consider the following when assessing the encryption needs for a deployment:

* What is the nature of the applications with respect to security? Do
they encrypt all or only a part of the application inputs and output?
What percentage of the information needs to be securely transmitted?
* Are the applications going to be deployed on an application server
that is directly connected to the Internet? Will a web server exist in a
demilitarized zone (DMZ) separate from the application server tier and
backend enterprise systems?
+
A DMZ-style deployment is recommended for high security. It is also
useful when the application has a significant amount of static text and
image content and some business logic that executes on the {productName}, behind the most secure firewall. {productName} provides
secure reverse proxy plugins to enable integration with popular web
servers. The {productName} can also be deployed and used as a web
server in DMZ.

* Is encryption required between the web servers in the DMZ and
application servers in the next tier? The reverse proxy plugins supplied
with {productName} support SSL encryption between the web server and
application server tier. If SSL is enabled, hardware capacity planning
must be take into account the encryption policy and mechanisms.

* If software encryption is to be employed:

** What is the expected performance overhead for every tier in the
system, given the security requirements?

** What are the performance and throughput characteristics of various
choices?

For information on how to encrypt the communication between web servers
and {productName}, see "link:../security-guide/message-security.html#GSSCG00037[Administering Message
Security]" in {productName} Security Guide.

[[gkvjf]][[GSPTG00156]][[high-availability-clustering-load-balancing-and-failover]]

==== High Availability Clustering, Load Balancing, and Failover

{productName} 7 enables multiple {productName} instances to be
clustered to provide high availability through failure protection,
scalability, and load balancing.

High availability applications and services provide their functionality
continuously, regardless of hardware and software failures. To make such
reliability possible, {productName} 7 provides mechanisms for
maintaining application state data between clustered {productName}
instances. Application state data, such as HTTP session data, stateful
EJB sessions, and dynamic cache information, is replicated in real time
across server instances. If any one server instance goes down, the
session state is available to the next failover server, resulting in
minimum application downtime and enhanced transactional security.

{productName} provides the following high availability features:

* High Availability Session Persistence
* High Availability Java Message Service
* RMI-IIOP Load Balancing and Failover

See link:tuning-java.html#glaat[Tuning High Availability Persistence] for
high availability persistence tuning recommendations.

See the link:../ha-administration-guide/toc.html#GSHAG[{productName} High
Availability Administration Guide] for complete information about
configuring high availability clustering, load balancing, and failover
features in {productName} 7.

[[abeay]][[GSPTG00157]][[hardware-resources]]

==== Hardware Resources

The type and quantity of hardware resources available greatly influence
performance tuning and site planning.

{productName} provides excellent vertical scalability. It can scale
to efficiently utilize multiple high-performance CPUs, using just one
application server process. A smaller number of application server
instances makes maintenance easier and administration less expensive.
Also, deploying several related applications on fewer application
servers can improve performance, due to better data locality, and reuse
of cached data between co-located applications. Such servers must also
contain large amounts of memory, disk space, and network capacity to
cope with increased load.

{productName} can also be deployed on large "farms" of relatively
modest hardware units. Business applications can be partitioned across
various server instances. Using one or more external load balancers can
efficiently spread user access across all the application server
instances. A horizontal scaling approach may improve availability, lower
hardware costs and is suitable for some types of applications. However,
this approach requires administration of more application server
instances and hardware nodes.

[[abeaz]][[GSPTG00158]][[administration]]

==== Administration

A single {productName} installation on a server can encompass
multiple instances. A group of one or more instances that are
administered by a single Administration Server is called a domain.
Grouping server instances into domains permits different people to
independently administer the groups.

You can use a single-instance domain to create a "sandbox" for a
particular developer and environment. In this scenario, each developer
administers his or her own application server, without interfering with
other application server domains. A small development group may choose
to create multiple instances in a shared administrative domain for
collaborative development.

In a deployment environment, an administrator can create domains based
on application and business function. For example, internal Human
Resources applications may be hosted on one or more servers in one
Administrative domain, while external customer applications are hosted
on several administrative domains in a server farm.

{productName} supports virtual server capability for web
applications. For example, a web application hosting service provider
can host different URL domains on a single {productName} process for
efficient administration.

For detailed information on administration, see the
link:../administration-guide/toc.html#GSADG[{productName} Administration Guide].

[[abeba]][[GSPTG00050]][[general-tuning-concepts]]

=== General Tuning Concepts

Some key concepts that affect performance tuning are:

* User load
* Application scalability
* Margins of safety

The following table describes these concepts, and how they are measured
in practice. The left most column describes the general concept, the
second column gives the practical ramifications of the concept, the
third column describes the measurements, and the right most column
describes the value sources.

[[sthref6]][[gacmp]]

Table 1-2 Factors That Affect Performance

[width="100%",cols="<14%,<13%,<26%,<47%",options="header",]
|===
|Concept |In practice |Measurement |Value sources

|User Load
|Concurrent sessions at peak load
a|Transactions Per Minute (TPM)

Web Interactions Per Second (WIPS)

a|(Max. number of concurrent users) * (expected response time) / (time
between clicks)

Example:

(100 users * 2 sec) / 10 sec = 20

|Application Scalability
|Transaction rate measured on one CPU
|TPM or WIPS
|Measured from workload benchmark. Perform at each tier.

|Vertical scalability
|Increase in performance from additional CPUs
|Percentage gain per additional CPU
|Based on curve fitting from benchmark.
Perform tests while gradually increasing the number of CPUs.
Identify the "knee" of the curve, where additional CPUs are providing
uneconomical gains in performance. Requires tuning as described in this
guide. Perform at each tier and iterate if necessary. Stop here if this
meets performance requirements.

|Horizontal scalability
|Increase in performance from additional servers
|Percentage gain per additional server process and/or hardware node.
|Use a well-tuned single application server instance, as in previous step.
Measure how much each additional server instance and hardware node
improves performance.

|Safety Margins
|High availability requirements
|If the system must cope with failures, size the system to meet
performance requirements assuming that one or more application server
instances are non functional
|Different equations used if high availability is required.

| +
|Excess capacity for unexpected peaks
|It is desirable to operate a
server at less than its benchmarked peak, for some safety margin
|80% system capacity utilization at peak loads may work for most installations.
Measure your deployment under real and simulated peak loads.
|===


[[abebb]][[GSPTG00159]][[capacity-planning]]

==== Capacity Planning

The previous discussion guides you towards defining a deployment
architecture. However, you determine the actual size of the deployment
by a process called capacity planning. Capacity planning enables you to
predict:

* The performance capacity of a particular hardware configuration.
* The hardware resources required to sustain specified application load
and performance.

You can estimate these values through careful performance benchmarking,
using an application with realistic data sets and workloads.

[[gacmz]][[GSPTG00036]][[to-determine-capacity]]

===== To Determine Capacity

1. Determine performance on a single CPU.
+
First determine the largest load that a single processor can sustain.
You can obtain this figure by measuring the performance of the
application on a single-processor machine. Either leverage the
performance numbers of an existing application with similar processing
characteristics or, ideally, use the actual application and workload in
a testing environment. Make sure that the application and data resources
are tiered exactly as they would be in the final deployment.
2. [[CEGHGCGI]]
Determine vertical scalability.

Determine how much additional performance you gain when you add
processors. That is, you are indirectly measuring the amount of shared
resource contention that occurs on the server for a specific workload.
Either obtain this information based on additional load testing of the
application on a multiprocessor system, or leverage existing information
from a similar application that has already been load tested.

Running a series of performance tests on one to eight CPUs, in
incremental steps, generally provides a sense of the vertical
scalability characteristics of the system. Be sure to properly tune the
application, {productName}, backend database resources, and operating
system so that they do not skew the results.
3. Determine horizontal scalability.
+
If sufficiently powerful hardware resources are available, a single
hardware node may meet the performance requirements. However for better
availability, you can cluster two or more systems. Employing external
load balancers and workload simulation, determine the performance
benefits of replicating one well-tuned application server node, as
determined in step link:#CEGHGCGI[2].

[[abebc]][[GSPTG00160]][[user-expectations]]

==== User Expectations

Application end-users generally have some performance expectations.
Often you can numerically quantify them. To ensure that customer needs
are met, you must understand these expectations clearly, and use them in
capacity planning.

Consider the following questions regarding performance expectations:

* What do users expect the average response times to be for various
interactions with the application? What are the most frequent
interactions? Are there any extremely time-critical interactions? What
is the length of each transaction, including think time? In many cases,
you may need to perform empirical user studies to get good estimates.
* What are the anticipated steady-state and peak user loads? Are there
are any particular times of the day, week, or year when you observe or
expect to observe load peaks? While there may be several million
registered customers for an online business, at any one time only a
fraction of them are logged in and performing business transactions. A
common mistake during capacity planning is to use the total size of
customer population as the basis and not the average and peak numbers
for concurrent users. The number of concurrent users also may exhibit
patterns over time.
* What is the average and peak amount of data transferred per request?
This value is also application-specific. Good estimates for content
size, combined with other usage patterns, will help you anticipate
network capacity needs.
* What is the expected growth in user load over the next year? Planning
ahead for the future will help avoid crisis situations and system
downtimes for upgrades.

[[abebd]][[GSPTG00051]][[further-information]]

=== Further Information

* For more information on Java performance, see
http://java.sun.com/docs/performance[Java Performance Documentation]
(`http://java.sun.com/docs/performance`) and
http://java.sun.com/blueprints/performance/index.html[Java Performance
BluePrints] (`http://java.sun.com/blueprints/performance/index.html`).
* For more information about performance tuning for high availability
configurations, see the link:../ha-administration-guide/toc.html#GSHAG[{productName}
High Availability Administration Guide].
* For complete information about using the Performance Tuning features
available through the {productName} Administration Console, refer to
the Administration Console online help.
* For details on optimizing EJB components, see
http://java.sun.com/developer/technicalArticles/ebeans/sevenrules/[Seven
Rules for Optimizing Entity Beans]
(`http://java.sun.com/developer/technicalArticles/ebeans/sevenrules/`)
* For details on profiling,
see "link:../application-development-guide/setting-up-dev-env.html#GSDVG00341[
Profiling Tools]" in {productName} Application Development Guide.
* To view a demonstration video showing how to use the {productName} Performance Tuner,
see the http://www.youtube.com/watch?v=FavsE2pzAjc[
Oracle GlassFish 3.1 - Performance Tuner demo].
* To find additional Performance Tuning development information, see the
http://blogs.oracle.com/jenblog/entry/performance_tuner_in_oracle_glassfish[
Performance Tuner in Oracle GlassFish 3.1] blog.
