type=page
status=published
title=Tuning the {productName}
next=tuning-java.html
prev=tuning-apps.html
~~~~~~

= Tuning the {productName}

[[GSPTG00005]][[abedn]]


[[tuning-the-glassfish-server]]
== 3 Tuning the {productName}

This chapter describes some ways to tune your {productName}
installation for optimum performance.

Note that while this chapter describes numerous interactions with both
the {productName} Administration Console and the command-line
interface, it is not intended to provide exhaustive descriptions of
either. For complete information about using the Administration Console,
refer to the Administration Console online help. For complete
information about using the {productName} command-line interface,
refer to the other titles in the {productName} documentation set at
`http://docs.oracle.com/docs/cd/E18930_01/index.html`.

The following topics are addressed here:

* link:#gkxwm[Using the {productName} Performance Tuner]
* link:#abedo[Deployment Settings]
* link:#abeds[Logger Settings]
* link:#abedw[Web Container Settings]
* link:#abeea[EJB Container Settings]
* link:#abeel[Java Message Service Settings]
* link:#abeem[Transaction Service Settings]
* link:#abeet[HTTP Service Settings]
* link:#abegk[Network Listener Settings]
* link:#gkxjt[Transport Settings]
* link:#abehk[Thread Pool Settings]
* link:#abegt[ORB Settings]
* link:#abehp[Resource Settings]
* link:#gkxvd[Load Balancer Settings]

[[gkxwm]][[GSPTG00055]][[using-the-glassfish-server-performance-tuner]]

=== Using the {productName} Performance Tuner

You can significantly improve the performance of {productName} and
the applications deployed on it by adjusting a few deployment and server
configuration settings. These changes can be made manually, as described
in this chapter, or by using the built-in Performance Tuner in the
{productName} Administration Console.

The Performance Tuner recommends server settings to suit the needs of
your {productName} deployment. It helps you reach an optimal
configuration, although finer tuning might be needed in case of specific
requirements. You can configure performance tuning for the entire
domain, or for individual {productName} instances or clusters. The
Tuner performs a static analysis of {productName} resources and
throughput requirements. Note that no dynamic inspection of the system
is performed.

For complete information about using the Performance Tuning features
available through the {productName} Administration Console, refer to
the Administration Console online help. You may also want to refer to
the following resources for additional information:

* To view a demonstration video showing how to use the {productName}
Performance Tuner, see the
http://www.youtube.com/watch?v=FavsE2pzAjc[{productName} 3.1 -
Performance Tuner demo] (`http://www.youtube.com/watch?v=FavsE2pzAjc`).
* To find additional Performance Tuning development information, see the
http://blogs.oracle.com/jenblog/entry/performance_tuner_in_oracle_glassfish[Performance
Tuner in {productName} 3.1]
(`http://blogs.oracle.com/jenblog/entry/performance_tuner_in_oracle_glassfish`)
blog.

[[abedo]][[GSPTG00056]][[deployment-settings]]

=== Deployment Settings

Deployment settings can have significant impact on performance. Follow
these guidelines when configuring deployment settings for best
performance:

* link:#abedp[Disable Auto-Deployment]
* link:#abedq[Use Pre-compiled JavaServer Pages]
* link:#abedr[Disable Dynamic Application Reloading]

[[abedp]][[GSPTG00180]][[disable-auto-deployment]]

==== Disable Auto-Deployment

Enabling auto-deployment will adversely affect deployment, though it is
a convenience in a development environment. For a production system,
disable auto-deploy to optimize performance. If auto-deployment is
enabled, then the Reload Poll Interval setting can have a significant
performance impact.

To enable or disable auto-deployment from the {productName}
Administration Console, navigate to the Domain node and then click the
Applications Configuration tab. Refer to the Administration Console for
further instructions. Alternatively, refer to "link:application-deployment-guide/deploying-applications.html#GSDPG00041[To
Deploy an Application or Module Automatically]" in {productName} Application Deployment Guide for instructions on enabling
or disabling auto-deployment.

[[abedq]][[GSPTG00181]][[use-pre-compiled-javaserver-pages]]

==== Use Pre-compiled JavaServer Pages

Compiling JSP files is resource intensive and time consuming.
Pre-compiling JSP files before deploying applications on the server will
improve application performance. When you do so, only the resulting
servlet class files will be deployed.

You can specify to precompile JSP files when you deploy an application
through the Administration Console or `deploy` subcommand. You can also
specify to pre-compile JSP files for a deployed application with the
Administration Console. Navigate to the Domain node and then click the
Applications Configuration tab. Refer to the Administration Console for
further instructions.

[[abedr]][[GSPTG00182]][[disable-dynamic-application-reloading]]

==== Disable Dynamic Application Reloading

If dynamic reloading is enabled, the server periodically checks for
changes in deployed applications and automatically reloads the
application with the changes. Dynamic reloading is intended for
development environments and is also incompatible with session
persistence. To improve performance, disable dynamic class reloading.

You can use the Administration Console to disable dynamic class
reloading for an application that is already deployed. Navigate to the
Domain node and then click the Applications Configuration tab. Refer to
the Administration Console for further instructions.

[[abeds]][[GSPTG00057]][[logger-settings]]

=== Logger Settings

The {productName} produces writes log messages and exception stack
trace output to the log file in the logs directory of the instance,
domain-dir``/logs``. The volume of log activity can impact server
performance; particularly in benchmarking situations.

[[abedt]][[GSPTG00183]][[general-settings]]

==== General Settings

In general, writing to the system log slows down performance slightly;
and increased disk access (increasing the log level, decreasing the file
rotation limit or time limit) also slows down the application.

Also, make sure that any custom log handler does not log to a slow
device like a network file system since this can adversely affect
performance.

[[abedu]][[GSPTG00184]][[log-levels]]

==== Log Levels

Set the log level for the server and its subsystems in the {productName} Administration Console. Navigate to the
Configurations>configuration-name>Logger Settings page, and follow the
instructions in the online help. Alternatively, you can configure
logging by following the instructions in "link:administration-guide/logging.html#GSADG00010[Administering
the Logging Service]" in {productName}
Administration Guide.

[[abedw]][[GSPTG00058]][[web-container-settings]]

=== Web Container Settings

Set Web container settings in the {productName} Administration
Console by navigating to the Configurations>configuration-name>Web
Container node. Follow the instructions in the online help for more
information. Alternatively, you can configure Web container settings by
following the instructions in "link:administration-guide/webapps.html#GSADG00009[Administering Web
Applications]" in {productName} Administration
Guide.

* link:#abedx[Session Properties: Session Timeout]
* link:#abedy[Manager Properties: Reap Interval]
* link:#abedz[Disable Dynamic JSP Reloading]

[[abedx]][[GSPTG00185]][[session-properties-session-timeout]]

==== Session Properties: Session Timeout

Session timeout determines how long the server maintains a session if a
user does not explicitly invalidate the session. The default value is 30
minutes. Tune this value according to your application requirements.
Setting a very large value for session timeout can degrade performance
by causing the server to maintain too many sessions in the session
store. However, setting a very small value can cause the server to
reclaim sessions too soon.

[[abedy]][[GSPTG00186]][[manager-properties-reap-interval]]

==== Manager Properties: Reap Interval

Modifying the reap interval can improve performance, but setting it
without considering the nature of your sessions and business logic can
cause data inconsistency, especially for time-based
persistence-frequency.

For example, if you set the reap interval to 60 seconds, the value of
session data will be recorded every 60 seconds. But if a client accesses
a servlet to update a value at 20 second increments, then
inconsistencies will result.

For example, consider the following online auction scenario:

* Bidding starts at $5, in 60 seconds the value recorded will be $8
(three 20 second intervals).
* During the next 40 seconds, the client starts incrementing the price.
The value the client sees is $10.
* During the client's 20 second rest, the {productName} stops and
starts in 10 seconds. As a result, the latest value recorded at the 60
second interval ($8) is be loaded into the session.
* The client clicks again expecting to see $11; but instead sees is $9,
which is incorrect.
* So, to avoid data inconsistencies, take into the account the expected
behavior of the application when adjusting the reap interval.

[[abedz]][[GSPTG00187]][[disable-dynamic-jsp-reloading]]

==== Disable Dynamic JSP Reloading

On a production system, improve web container performance by disabling
dynamic JSP reloading. To do so, edit the `default-web.xml` file in the
`config` directory for each instance. Change the servlet definition for
a JSP file to look like this:

[source,xml]
----
<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  <init-param>
    <param-name>development</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>genStrAsCharArray</param-name>
    <param-value>true</param-value>
  </init-param>  <load-on-startup>3</load-on-startup>
</servlet>
----

[[abeea]][[GSPTG00059]][[ejb-container-settings]]

=== EJB Container Settings

The EJB Container has many settings that affect performance. As with
other areas, use monitor the EJB Container to track its execution and
performance.

You can configure most EJB container settings from the {productName}
Administration Console by navigating to the
Configurations>configuration-name>EJB Container node and then following
the instructions in the online help.

[[abeeb]][[GSPTG00188]][[monitoring-the-ejb-container]]

==== Monitoring the EJB Container

Monitoring the EJB container is disabled by default. You can enable EJB
monitoring through the {productName} Administration Console by
navagating to the the Configurations>configuration-name>Monitoring node
and then following the instructions in the online help. Set the
monitoring level to LOW for to monitor all deployed EJB components, EJB
pools, and EJB caches. Set the monitoring level to HIGH to also monitor
EJB business methods.

[[abeec]][[GSPTG00189]][[tuning-the-ejb-container]]

==== Tuning the EJB Container

The EJB container caches and pools EJB components for better
performance. Tuning the cache and pool properties can provide
significant performance benefits to the EJB container.

The pool settings are valid for stateless session and entity beans while
the cache settings are valid for stateful session and entity beans.

The following topics are addressed here:

* link:#abeed[Overview of EJB Pooling and Caching]
* link:#abeee[Tuning the EJB Pool]
* link:#abeeg[Tuning the EJB Cache]
* link:#abeei[Pool and Cache Settings for Individual EJB Components]
* link:#abeej[Commit Option]

[[abeed]][[GSPTG00117]][[overview-of-ejb-pooling-and-caching]]

===== Overview of EJB Pooling and Caching

Both stateless session beans and entity beans can be pooled to improve
server performance. In addition, both stateful session beans and entity
beans can be cached to improve performance.

[[sthref7]][[gacmo]]

Table 3-1 Bean Type Pooling or Caching

[width="100%",cols="<34%,<33%,<33%",options="header",]
|===
|Bean Type |Pooled |Cached
|Stateless Session |Yes |No
|Stateful Session |No |Yes
|Entity |Yes |Yes
|===


The difference between a pooled bean and a cached bean is that pooled
beans are all equivalent and indistinguishable from one another. Cached
beans, on the contrary, contain conversational state in the case of
stateful session beans, and are associated with a primary key in the
case of entity beans. Entity beans are removed from the pool and added
to the cache on `ejbActivate()` and removed from the cache and added to
the pool on `ejbPassivate()`. `ejbActivate()` is called by the container
when a needed entity bean is not in the cache. `ejbPassivate()` is
called by the container when the cache grows beyond its configured
limits.


[NOTE]
====
If you develop and deploy your EJB components using Oracle Java Studio,
then you need to edit the individual bean descriptor settings for bean
pool and bean cache. These settings might not be suitable for
production-level deployment.
====


[[abeee]][[GSPTG00118]][[tuning-the-ejb-pool]]

===== Tuning the EJB Pool

A bean in the pool represents the pooled state in the EJB lifecycle.
This means that the bean does not have an identity. The advantage of
having beans in the pool is that the time to create a bean can be saved
for a request. The container has mechanisms that create pool objects in
the background, to save the time of bean creation on the request path.

Stateless session beans and entity beans use the EJB pool. Keeping in
mind how you use stateless session beans and the amount of traffic your
server handles, tune the pool size to prevent excessive creation and
deletion of beans.

[[abeef]][[GSPTG00013]][[ejb-pool-settings]]

EJB Pool Settings

An individual EJB component can specify cache settings that override
those of the EJB container in the `<bean-pool>` element of the EJB
component's `sun-ejb-jar.xml` deployment descriptor.

The EJB pool settings are:

* Initial and Minimum Pool Size: the initial and minimum number of beans
maintained in the pool. Valid values are from 0 to `MAX_INTEGER,` and
the default value is 8. The corresponding EJB deployment descriptor
attribute is `steady-pool-size.`
+
Set this property to a number greater than zero for a moderately loaded
system. Having a value greater than zero ensures that there is always a
pooled instance to process an incoming request.
* Maximum Pool Size: the maximum number of connections that can be
created to satisfy client requests. Valid values are from zero to
`MAX_INTEGER`., and the default is 32. A value of zero means that the
size of the pool is unbounded. The potential implication is that the JVM
heap will be filled with objects in the pool. The corresponding EJB
deployment descriptor attribute is `max-pool-size`.
+
Set this property to be representative of the anticipated high load of
the system. An very large pool wastes memory and can slow down the
system. A very small pool is also inefficient due to contention.
* Pool Resize Quantity: the number of beans to be created or deleted
when the cache is being serviced by the server. Valid values are from
zero to `MAX_INTEGER` and default is 16. The corresponding EJB
deployment descriptor attribute is `resize-quantity`.
+
Be sure to re-calibrate the pool resize quantity when you change the
maximum pool size, to maintain an equilibrium. Generally, a larger
maximum pool size should have a larger pool resize quantity.
* Pool Idle Timeout: the maximum time that a stateless session bean,
entity bean, or message-driven bean is allowed to be idle in the pool.
After this time, the bean is destroyed if the bean in case is a
stateless session bean or a message driver bean. This is a hint to
server. The default value is 600 seconds. The corresponding EJB
deployment descriptor attribute is `pool-idle-timeout-in-seconds`.
+
If there are more beans in the pool than the maximum pool size, the pool
drains back to initial and minimum pool size, in steps of pool resize
quantity at an interval specified by the pool idle timeout. If the
resize quantity is too small and the idle timeout large, you will not
see the pool draining back to steady size quickly enough.

[[abeeg]][[GSPTG00119]][[tuning-the-ejb-cache]]

===== Tuning the EJB Cache

A bean in the cache represents the ready state in the EJB lifecycle.
This means that the bean has an identity (for example, a primary key or
session ID) associated with it.

Beans moving out of the cache have to be passivated or destroyed
according to the EJB lifecycle. Once passivated, a bean has to be
activated to come back into the cache. Entity beans are generally stored
in databases and use some form of query language semantics to load and
store data. Session beans have to be serialized when storing them upon
passivation onto the disk or a database; and similarly have to be
deserialized upon activation.

Any incoming request using these "ready" beans from the cache avoids the
overhead of creation, setting identity, and potentially activation. So,
theoretically, it is good to cache as many beans as possible. However,
there are drawbacks to caching:

* Memory consumed by all the beans affects the heap available in the
Virtual Machine.
* Increasing objects and memory taken by cache means longer, and
possibly more frequent, garbage collection.
* The application server might run out of memory unless the heap is
carefully tuned for peak loads.

Keeping in mind how your application uses stateful session beans and
entity beans, and the amount of traffic your server handles, tune the
EJB cache size and timeout settings to minimize the number of
activations and passivations.

[[abeeh]][[GSPTG00014]][[ejb-cache-settings]]

EJB Cache Settings

An individual EJB component can specify cache settings that override
those of the EJB container in the `<bean-cache>` element of the EJB
component's `sun-ejb-jar.xml` deployment descriptor.

The EJB cache settings are:

* Max Cache Size: Maximum number of beans in the cache. Make this
setting greater than one. The default value is 512. A value of zero
indicates the cache is unbounded, which means the size of the cache is
governed by Cache Idle Timeout and Cache Resize Quantity. The
corresponding EJB deployment descriptor attribute is `max-cache-size`.
* Cache Resize Quantity: Number of beans to be created or deleted when
the cache is serviced by the server. Valid values are from zero to
MAX_INTEGER, and the default is 16. The corresponding EJB deployment
descriptor attribute is `resize-quantity`.
* Removal Timeout: Amount of time that a stateful session bean remains
passivated (idle in the backup store). If a bean was not accessed after
this interval of time, then it is removed from the backup store and will
not be accessible to the client. The default value is 60 minutes. The
corresponding EJB deployment descriptor attribute is
`removal-timeout-in-seconds`.
* Removal Selection Policy: Algorithm used to remove objects from the
cache. The corresponding EJB deployment descriptor attribute is
`victim-selection-policy`. Choices are:

** NRU (not recently used). This is the default, and is actually
pseudo-random selection policy.

** FIFO (first in, first out)

** LRU (least recently used)
* Cache Idle Timeout: Maximum time that a stateful session bean or
entity bean is allowed to be idle in the cache. After this time, the
bean is passivated to the backup store. The default value is 600
seconds. The corresponding EJB deployment descriptor attribute is
`cache-idle-timeout-in-seconds`.
* Refresh period: Rate at which a read-only-bean is refreshed from the
data source. Zero (0) means that the bean is never refreshed. The
default is 600 seconds. The corresponding EJB deployment descriptor
attribute is `refresh-period-in-seconds`. Note: this setting does not
have a custom field in the Admin Console. To set it, use the Add
Property button in the Additional Properties section.

[[abeei]][[GSPTG00120]][[pool-and-cache-settings-for-individual-ejb-components]]

===== Pool and Cache Settings for Individual EJB Components

Individual EJB pool and cache settings in the `sun-ejb-jar.xml`
deployment descriptor override those of the EJB container. The following
table lists the cache and pool settings for each type of EJB component.

[width="100%",cols="<35%,<13%,<13%,<13%,<13%,<13%",options="header",]
|===
|Cache or Pool Setting |Stateful Session Bean |Stateless Session Bean
|Entity Bean |Entity Read-Only Bean |Message Driven Bean
|`cache-resize-quantity` |X |+ |X |X |+

|`max-cache-size` |X |+ |X |X |+

|`cache-idle-timeout-in-seconds` |X |+ |X |X |+

|`removal-timeout-in-seconds` |X |+ |X |X |+

|`victim-selection-policy` |X |+ |X |X |+

|`refresh-period-in-seconds` |+ |+ |+ |X |+

|`steady-pool-size` |+ |X |X |X |+

|`pool-resize-quantity` |+ |X |X |X |X

|`max-pool-size` |+ |X |X |X |X

|`pool-idle-timeout-in-seconds` |+ |X |X |X |X
|===


[[abeej]][[GSPTG00121]][[commit-option]]

===== Commit Option

The commit option controls the action taken by the EJB container when an
EJB component completes a transaction. The commit option has a
significant impact on performance.

The following are the possible values for the commit option:

* Commit option B: When a transaction completes, the bean is kept in the
cache and retains its identity. The next invocation for the same primary
key can use the cached instance. The EJB container will call the bean's
`ejbLoad()` method before the method invocation to synchronize with the database.

* Commit option C: When a transaction completes, the EJB container calls
the bean's `ejbPassivate()` method, the bean is disassociated from its
primary key and returned to the free pool. The next invocation for the
same primary key will have to get a free bean from the pool, set the
`PrimaryKey` on this instance, and then call `ejbActivate()` on the
instance. Again, the EJB container will call the bean's `ejbLoad()`
before the method invocation to synchronize with the database.

Option B avoids `ejbAcivate()` and `ejbPassivate()` calls. So, in most
cases it performs better than option C since it avoids some overhead in
acquiring and releasing objects back to pool.

However, there are some cases where option C can provide better
performance. If the beans in the cache are rarely reused and if beans
are constantly added to the cache, then it makes no sense to cache
beans. With option C is used, the container puts beans back into the
pool (instead of caching them) after method invocation or on transaction
completion. This option reuses instances better and reduces the number
of live objects in the JVM, speeding garbage collection.

[[abeek]][[GSPTG00015]][[determining-the-best-commit-option]]

Determining the Best Commit Option

To determine whether to use commit option B or commit option C, first
take a look at the cache-hits value using the monitoring command for the
bean. If the cache hits are much higher than cache misses, then option B
is an appropriate choice. You might still have to change the
`max-cache-size` and `cache-resize-quantity` to get the best result.

If the cache hits are too low and cache misses are very high, then the
application is not reusing the bean instances and hence increasing the
cache size (using `max-cache-size`) will not help (assuming that the
access pattern remains the same). In this case you might use commit
option C. If there is no great difference between cache-hits and
cache-misses then tune `max-cache-size`, and probably
`cache-idle-timeout-in-seconds`.

[[abeel]][[GSPTG00060]][[java-message-service-settings]]

=== Java Message Service Settings

The Type attribute that determines whether the Java Message Service
(JMS) is on local or remote system affects performance. Local JMS
performance is better than remote JMS performance. However, a remote
cluster can provide failover capabilities and can be administrated
together, so there may be other advantages of using remote JMS. For more
information on using JMS, see "link:administration-guide/jms.html#GSADG00020[Administering the Java
Message Service (JMS)]" in {productName}
Administration Guide.

[[abeem]][[GSPTG00061]][[transaction-service-settings]]

=== Transaction Service Settings

The transaction manager makes it possible to commit and roll back
distributed transactions.

A distributed transactional system writes transactional activity into
transaction logs so that they can be recovered later. But writing
transactional logs has some performance penalty.

The following topics are addressed here:

* link:#abeen[Monitoring the Transaction Service]
* link:#abeep[Tuning the Transaction Service]

[[abeen]][[GSPTG00190]][[monitoring-the-transaction-service]]

==== Monitoring the Transaction Service

Transaction Manager monitoring is disabled by default. Enable monitoring
of the transaction service through the {productName} Administration
Console by navigating to the
Configurations>configuration-name>Monitoring node. Refer to the
Administration Console for complete instructions.

You can also enable monitoring with these commands:

[source]
----
set serverInstance.transaction-service.monitoringEnabled=true
reconfig serverInstance
----

[[abeeo]][[GSPTG00122]][[viewing-monitoring-information]]

===== Viewing Monitoring Information

To view monitoring information for the transaction service in the
{productName} Administration Console, navigate to the server (Admin
Server) node and then select the Monitor tab.

The following statistics are gathered on the transaction service:

* `total-tx-completed` Completed transactions.
* `total-tx-rolled-back` Total rolled back transactions.
* `total-tx-inflight` Total inflight (active) transactions.
* `isFrozen` Whether transaction system is frozen (true or false)
* `inflight-tx` List of inflight (active) transactions.

[[abeep]][[GSPTG00191]][[tuning-the-transaction-service]]

==== Tuning the Transaction Service

This property can be used to disable the transaction logging, where the
performance is of utmost importance more than the recovery. This
property, by default, won't exist in the server configuration.

Most Transaction Service tuning tasks can be performed through the
{productName} Administration Console by navigating to the
Configurations>configuration-name>Transaction Service node and then
following the instructions in the online help. Alternatively, you can
follow the instructions in "link:administration-guide/transactions.html#GSADG00022[Administering
Transactions]" in {productName} Administration
Guide.

[[abeeq]][[GSPTG00123]][[disable-distributed-transaction-logging]]

===== Disable Distributed Transaction Logging

You can disable transaction logging through the Administration Console
or by using the following `asadmin set` subcommand:

[source]
----
asadmin set
server1.transaction-service.disable-distributed-transaction-logging=true
----

Disabling transaction logging can improve performance. Setting it to
false (the default), makes the transaction service write transactional
activity to transaction logs so that transactions can be recovered. If
Recover on Restart is checked, this property is ignored.

Set this property to true only if performance is more important than
transaction recovery.

[[abeer]][[GSPTG00124]][[recover-on-restart-automatic-recovery]]

===== Recover On Restart (Automatic Recovery)

You can set the Recover on Restart attribute through the Administration
Console or by entering the following `asadmin set` subcommand:

[source]
----
asadmin set server1.transaction-service.automatic-recovery=false
----

When Recover on Restart is true, the server will always perform
transaction logging, regardless of the Disable Distributed Transaction
Logging attribute.

If Recover on Restart is false, then:

* If Disable Distributed Transaction Logging is false (the default),
then the server will write transaction logs.
* If Disable Distributed Transaction Logging is true, then the server
will not write transaction logs.
+
Not writing transaction logs will give approximately twenty percent
improvement in performance, but at the cost of not being able to recover
from any interrupted transactions. The performance benefit applies to
transaction-intensive tests. Gains in real applications may be less.

[[abees]][[GSPTG00125]][[keypoint-interval]]

===== Keypoint Interval

The keypoint interval determines how often entries for completed
transactions are removed from the log file. Keypointing prevents a
process log from growing indefinitely.

Frequent keypointing is detrimental to performance. The default value of
the Keypoint Interval is 2048, which is sufficient in most cases.

[[abeet]][[GSPTG00062]][[http-service-settings]]

=== HTTP Service Settings

Tuning the monitoring and access logging settings for the HTTP server
instances that handle client requests are important parts of ensuring
peak {productName} performance.

The following topics are addressed here:

* link:#abeeu[Monitoring the HTTP Service]
* link:#abefk[HTTP Service Access Logging]

[[abeeu]][[GSPTG00192]][[monitoring-the-http-service]]

==== Monitoring the HTTP Service

Disabling the collection of monitoring statistics can increase overall
{productName} performance. You can enable or disable monitoring
statistics collection for the HTTP service using either the
Administration Console or `asadmin` subcommands.

Refer to "link:administration-guide/monitoring.html#GSADG00011[Administering the Monitoring Service]" in
{productName} Administration Guide for complete
instructions on configuring the monitoring service using `asadmin`
subcommands.

If using the Administration Console, click the
Configurations>configuration-name>Monitoring node for the configuration
for which you want to enable or disable monitoring for selected
components. Refer to the Administration Console online help for complete
instructions.

For instructions on viewing comprehensive monitoring statistics using
`asadmin` subcommands, see "link:administration-guide/monitoring.html#GSADG00560[Viewing Comprehensive
Monitoring Data]" in {productName} Administration
Guide. If using the Administration Console, you can view monitoring
statistics by navigating to the server (Admin Server) node, and then
clicking the Monitor tab. Refer to the online help for configuring
different views of the available monitoring statistics.

When viewing monitoring statistics, some key performance-related
information to review includes the following:

* link:#abeew[DNS Cache Information (dns)]
* link:#abefh[File Cache Information (file-cache)]
* link:#abefi[Keep Alive (keep-alive)]
* link:#abefg[Connection Queue]

[[abeew]][[GSPTG00126]][[dns-cache-information-dns]]

===== DNS Cache Information (dns)

The DNS cache caches IP addresses and DNS names. The DNS cache is
disabled by default. In the DNS Statistics for Process ID All page under
Monitor in the web-based Administration interface the following
statistics are displayed:

* link:#abeex[Enabled]
* link:#abeey[CacheEntries (CurrentCacheEntries / MaxCacheEntries)]
* link:#abeez[HitRatio]
* link:#abefa[Caching DNS Entries]
* link:#abefb[Limit DNS Lookups to Asynchronous]
* link:#abefc[Enabled]
* link:#abefd[NameLookups]
* link:#abefe[AddrLookups]
* link:#abeff[LookupsInProgress]

[[abeex]][[GSPTG00016]][[enabled]]

Enabled

If the DNS cache is disabled, the rest of this section is not displayed.

By default, the DNS cache is off. Enable DNS caching in the
Administration Console by clicking the
Configurations>configuration-name>Network Config>http-listener-name
node. Click the HTTP tab and enable the DNS Lookup option.

[[abeey]][[GSPTG00017]][[cacheentries-currentcacheentries-maxcacheentries]]

CacheEntries (CurrentCacheEntries / MaxCacheEntries)

The number of current cache entries and the maximum number of cache
entries. A single cache entry represents a single IP address or DNS name
lookup. Make the cache as large as the maximum number of clients that
access your web site concurrently. Note that setting the cache size too
high is a waste of memory and degrades performance.

Set the maximum size of the DNS cache by entering or changing the value
in the in the Administration Console by clicking the
Configurations>configuration-name>Network Config>http-listener-name
node. Click the File tab and set the desired options.

[[abeez]][[GSPTG00018]][[hitratio]]

HitRatio

The hit ratio is the number of cache hits divided by the number of cache
lookups.

This setting is not tunable.


[NOTE]
====
If you turn off DNS lookups on your server, host name restrictions will
not work and IP addresses will appear instead of host names in log
files.
====


[[abefa]][[GSPTG00019]][[caching-dns-entries]]

Caching DNS Entries

It is possible to also specify whether to cache the DNS entries. If you
enable the DNS cache, the server can store hostname information after
receiving it. If the server needs information about the client in the
future, the information is cached and available without further
querying. specify the size of the DNS cache and an expiration time for
DNS cache entries. The DNS cache can contain 32 to 32768 entries; the
default value is 1024. Values for the time it takes for a cache entry to
expire can range from 1 second to 1 year specified in seconds; the
default value is 1200 seconds (20 minutes).

[[abefb]][[GSPTG00020]][[limit-dns-lookups-to-asynchronous]]

Limit DNS Lookups to Asynchronous

Do not use DNS lookups in server processes because they are
resource-intensive. If you must include DNS lookups, make them
asynchronous.

[[abefc]][[GSPTG00021]][[enabled-1]]

Enabled

If asynchronous DNS is disabled, the rest of this section will not be
displayed.

[[abefd]][[GSPTG00022]][[namelookups]]

NameLookups

The number of name lookups (DNS name to IP address) that have been done
since the server was started. This setting is not tunable.

[[abefe]][[GSPTG00023]][[addrlookups]]

AddrLookups

The number of address loops (IP address to DNS name) that have been done
since the server was started. This setting is not tunable.

[[abeff]][[GSPTG00024]][[lookupsinprogress]]

LookupsInProgress

The current number of lookups in progress.

[[abefh]][[GSPTG00127]][[file-cache-information-file-cache]]

===== File Cache Information (file-cache)

The file cache caches static content so that the server handles requests
for static content quickly. The file-cache section provides statistics
on how your file cache is being used.

For information about tuning the file cache, see link:#gkxit[File Cache
Settings].

The Monitoring page lists the following file cache statistics:

* Number of Hits on Cached File Content
* Number of Cache Entries
* Number of Hits on Cached File Info
* Heap Space Used for Cache
* Number of Misses on Cached File Content
* Cache Lookup Misses
* Number of Misses on Cached File Content
* Max Age of a Cache Entry
* Max Number of Cache Entries
* Max Number of Open Entries
* Is File Cached Enabled?
* Maximum Memory Map to be Used for Cache
* Memory Map Used for cache
* Cache Lookup Hits
* Open Cache Entries: The number of current cache entries and the
maximum number of cache entries are both displayed. A single cache entry
represents a single URI. This is a tunable setting.
* Maximum Heap Space to be Used for Cache

[[abefi]][[GSPTG00128]][[keep-alive-keep-alive]]

===== Keep Alive (keep-alive)

The following are statistics related to the Keep Alive system. The most
important settings you can tune here relate to HTTP Timeout. See
link:#abefu[Timeout] for more information.

* Connections Terminated Due to Client Connection Timed Out
* Max Connection Allowed in Keep-alive
* Number of Hits
* Connections in Keep-alive Mode
* Connections not Handed to Keep-alive Thread Due to too Many Persistent
Connections
* The Time in Seconds Before Idle Connections are Closed
* Connections Closed Due to Max Keep-alive Being Exceeded

[[abefg]][[GSPTG00129]][[connection-queue]]

===== Connection Queue

* Total Connections Queued: Total connections queued is the total number
of times a connection has been queued. This includes newly accepted
connections and connections from the keep-alive system.
* Average Queuing Delay: Average queueing delay is the average amount of
time a connection spends in the connection queue. This represents the
delay between when a request connection is accepted by the server, and a
request processing thread (also known as a session) begins servicing the
request.

[[abefk]][[GSPTG00193]][[http-service-access-logging]]

==== HTTP Service Access Logging

Accessing Logging can be tuned using several `asadmin` subcommands.
Refer to "link:administration-guide/monitoring.html#GSADG00011[Administering the Monitoring Service]" in
{productName} Administration Guide for
information about using these subcommands.

If using the Administration Console, Access Logging is configured from
the Configurations>configuration-name>HTTP Service page. Refer to the
Administration Console online help for complete instructions about the
options on this page.

To enable or disable access logging, check or uncheck the Access Logging
Enabled checkbox. Access Logging is disabled by default.

When performing benchmarking, ensure that Access Logging is disabled. If
Access Logging is enabled, it is recommended that you also enable
Rotation to ensure that the logs do not run out of disk space.

[[abegk]][[GSPTG00063]][[network-listener-settings]]

=== Network Listener Settings

You can tune Network Listener settings from the command line by using
the instructions in "link:administration-guide/http_https.html#GSADG00588[Administering HTTP Network
Listeners]" in {productName} Administration
Guide.

If using the Administration Console, navigate to the Configurations
>configuration-name>Network Config>Network Listeners>listener-name node,
and then click the tab for the desired configuration page. Refer to the
online help for complete instructions about the options on these tabs.

{productName} Network Listener performance can be enhanced by
modifying settings on the following Edit Network Listener tabs in the
Administration Console:

* link:#abegl[General Settings]
* link:#gkxjd[HTTP Settings]
* link:#gkxit[File Cache Settings]

[[abegl]][[GSPTG00194]][[general-settings-1]]

==== General Settings

For machines with only one network interface card (NIC), set the network
address to the IP address of the machine (for example, 192.18.80.23
instead of default 0.0.0.0). If you specify an IP address other than
0.0.0.0, the server will make one less system call per connection.
Specify an IP address other than 0.0.0.0 for best possible performance.
If the server has multiple NIC cards then create multiple listeners for
each NIC.

[[gkxjd]][[GSPTG00195]][[http-settings]]

==== HTTP Settings

The following settings on the HTTP tab can significantly affect
performance:

* link:#abeft[Max Connections]
* link:#abegd[DNS Lookup Enabled]
* link:#abefu[Timeout]
* link:#abefq[Header Buffer Length]

[[abeft]][[GSPTG00130]][[max-connections]]

===== Max Connections

Max Connections controls the number of requests that a particular client
can make over a keep-alive connection. The range is any positive
integer, and the default is 256.

Adjust this value based on the number of requests a typical client makes
in your application. For best performance specify quite a large number,
allowing clients to make many requests.

The number of connections specified by Max Connections is divided
equally among the keep alive threads. If Max Connections is not equally
divisible by Thread Count, the server can allow slightly more than Max
Connections simultaneous keep alive connections.

[[abegd]][[GSPTG00131]][[dns-lookup-enabled]]

===== DNS Lookup Enabled

This setting specifies whether the server performs DNS (domain name
service) lookups on clients that access the server. When DNS lookup is
not enabled, when a client connects, the server knows the client's IP
address but not its host name (for example, it knows the client as
198.95.251.30, rather than `www.xyz.com`). When DNS lookup is enabled,
the server will resolve the client's IP address into a host name for
operations like access control, common gateway interface (CGI) programs,
error reporting, and access logging.

If the server responds to many requests per day, reduce the load on the
DNS or NIS (Network Information System) server by disabling DNS lookup.
Enabling DNS lookup will increase the latency and load on the system, so
modify this setting with caution.

[[abefu]][[GSPTG00132]][[timeout]]

===== Timeout

Timeout determines the maximum time (in seconds) that the server holds
open an HTTP keep alive connection. A client can keep a connection to
the server open so that multiple requests to one server can be serviced
by a single network connection. Since the number of open connections
that the server can handle is limited, a high number of open connections
will prevent new clients from connecting.

The default time out value is 30 seconds. Thus, by default, the server
will close the connection if idle for more than 30 seconds. The maximum
value for this parameter is 300 seconds (5 minutes).

The proper value for this parameter depends upon how much time is
expected to elapse between requests from a given client. For example, if
clients are expected to make requests frequently then, set the parameter
to a high value; likewise, if clients are expected to make requests
rarely, then set it to a low value.

Both HTTP 1.0 and HTTP 1.1 support the ability to send multiple requests
across a single HTTP session. A server can receive hundreds of new HTTP
requests per second. If every request was allowed to keep the connection
open indefinitely, the server could become overloaded with connections.
On Unix/Linux systems, this could easily lead to a file table overflow.

The {productName}'s Keep Alive system, which is affected by the
Timeout setting, addresses this problem. A waiting keep alive connection
has completed processing the previous request, and is waiting for a new
request to arrive on the same connection. The server maintains a counter
for the maximum number of waiting keep-alive connections. If the server
has more than the maximum waiting connections open when a new connection
waits for a keep-alive request, the server closes the oldest connection.
This algorithm limits the number of open waiting keep-alive connections.

If your system has extra CPU cycles, incrementally increase the keep
alive settings and monitor performance after each increase. When
performance saturates (stops improving), then stop increasing the
settings.

[[abefq]][[GSPTG00133]][[header-buffer-length]]

===== Header Buffer Length

The size (in bytes) of the buffer used by each of the request processing
threads for reading the request data from the client.

Adjust the value based on the actual request size and observe the impact
on performance. In most cases the default should suffice. If the request
size is large, increase this parameter.

[[gkxit]][[GSPTG00196]][[file-cache-settings]]

==== File Cache Settings

The {productName} uses a file cache to serve static information
faster. The file cache contains information about static files such as
HTML, CSS, image, or text files. Enabling the HTTP file cache will
improve performance of applications that contain static files.

The following settings on the File Cache tab can significantly affect
performance:

* link:#abegf[Max File Count]
* link:#abegh[Max Age]

[[abegf]][[GSPTG00134]][[max-file-count]]

===== Max File Count

Max File Count determines how many files are in the cache. If the value
is too big, the server caches little-needed files, which wastes memory.
If the value is too small, the benefit of caching is lost. Try different
values of this attribute to find the optimal solution for specific
applications—generally, the effects will not be great.

[[abegh]][[GSPTG00135]][[max-age]]

===== Max Age

This parameter controls how long cached information is used after a file
has been cached. An entry older than the maximum age is replaced by a
new entry for the same file.

If your Web site's content changes infrequently, increase this value for
improved performance. Set the maximum age by entering or changing the
value in the Maximum Age field of the File Cache Configuration page in
the web-based Admin Console for the HTTP server node and selecting the
File Caching Tab.

Set the maximum age based on whether the content is updated (existing
files are modified) on a regular schedule or not. For example, if
content is updated four times a day at regular intervals, you could set
the maximum age to 21600 seconds (6 hours). Otherwise, consider setting
the maximum age to the longest time you are willing to serve the
previous version of a content file after the file has been modified.

[[gkxjt]][[GSPTG00064]][[transport-settings]]

=== Transport Settings

The Acceptor Threads property for the Transport service specifies how
many threads you want in accept mode on a listen socket at any time. It
is a good practice to set this to less than or equal to the number of
CPUs in your system.

In the {productName}, acceptor threads on an HTTP Listener accept
connections and put them onto a connection queue. Session threads then
pick up connections from the queue and service the requests. The server
posts more session threads if required at the end of the request.

See "link:administration-guide/http_https.html#GSADG00771[Administering HTTP Network Listeners]" in
{productName} Administration Guide for
instructions on modifying the Acceptor Threads property. If using the
Administration Console, the Acceptor Threads property is available on
the Configurations>configuration-name>Network Config>Transports>tcp
page.

[[abehk]][[GSPTG00065]][[thread-pool-settings]]

=== Thread Pool Settings

You can tune thread pool settings by following the instructions in
"link:administration-guide/threadpools.html#GSADG00008[Administering Thread Pools]" in {productName} Administration Guide. If using the Administration Console
Thread Pool settings are available on the
Configurations>configuration-name>Thread Pools>thread-pool-name page.

The following thread pool settings can have significant effects on
{productName} performance:

* link:#abefn[Max Thread Pool Size]
* link:#abefo[Min Thread Pool Size]

[[abefn]][[GSPTG00197]][[max-thread-pool-size]]

==== Max Thread Pool Size

The Max Thread Pool Size parameter specifies the maximum number of
simultaneous requests the server can handle. The default value is 5.
When the server has reached the limit or request threads, it defers
processing new requests until the number of active requests drops below
the maximum amount. Increasing this value will reduce HTTP response
latency times.

In practice, clients frequently connect to the server and then do not
complete their requests. In these cases, the server waits a length of
time specified by the Timeout parameter.

Also, some sites do heavyweight transactions that take minutes to
complete. Both of these factors add to the maximum simultaneous requests
that are required. If your site is processing many requests that take
many seconds, you might need to increase the number of maximum
simultaneous requests.

Adjust the thread count value based on your load and the length of time
for an average request. In general, increase this number if you have
idle CPU time and requests that are pending; decrease it if the CPU
becomes overloaded. If you have many HTTP 1.0 clients (or HTTP 1.1
clients that disconnect frequently), adjust the timeout value to reduce
the time a connection is kept open.

Suitable Request Max Thread Pool Size values range from 100 to 500,
depending on the load. If your system has extra CPU cycles, keep
incrementally increasing thread count and monitor performance after each
incremental increase. When performance saturates (stops improving), then
stop increasing thread count.

[[abefo]][[GSPTG00198]][[min-thread-pool-size]]

==== Min Thread Pool Size

The Min Thread Pool Size property specifies the minimum number of
threads the server initiates upon startup. The default value is 2. Min
Thread Pool Size represents a hard limit for the maximum number of
active threads that can run simultaneously, which can become a
bottleneck for performance.

Specifying the same value for minimum and maximum threads allows
{productName} to use a slightly more optimized thread pool. This
configuration should be considered unless the load on the server varies
quite significantly.

[[abegt]][[GSPTG00066]][[orb-settings]]

=== ORB Settings

The {productName} includes a high performance and scalable CORBA
Object Request Broker (ORB). The ORB is the foundation of the EJB
Container on the server.

For complete instructions on configuring ORB settings, refer to
"link:administration-guide/orb.html#GSADG00018[Administering the Object Request Broker (ORB)]" in
{productName} Administration Guide. Also refer to
"link:ha-administration-guide/rmi-iiop.html#GSHAG00013[RMI-IIOP Load Balancing and Failover]" in {productName} High Availability Administration Guide. You
can also configure most ORB settings through the {productName}
Administration Console by navigating to the
Configurations>configuration-name> ORB node and then following the
instructions in the Administration Console online help.

The following topics are addressed here:

* link:#abegu[Overview]
* link:#abegv[How a Client Connects to the ORB]
* link:#abegw[Monitoring the ORB]
* link:#abegz[Tuning the ORB]

[[abegu]][[GSPTG00199]][[overview]]

==== Overview

The ORB is primarily used by EJB components via:

* RMI/IIOP path from an application client (or rich client) using the
application client container.
* RMI/IIOP path from another {productName} instance ORB.
* RMI/IIOP path from another vendor's ORB.
* In-process path from the Web Container or MDB (message driven beans)
container.

When a server instance makes a connection to another server instance
ORB, the first instance acts as a client ORB. SSL over IIOP uses a fast
optimized transport with high-performance native implementations of
cryptography algorithms.

It is important to remember that EJB local interfaces do not use the
ORB. Using a local interface passes all arguments by reference and does
not require copying any objects.

[[abegv]][[GSPTG00200]][[how-a-client-connects-to-the-orb]]

==== How a Client Connects to the ORB

A rich client Java program performs a new `initialContext()` call which
creates a client side ORB instance. This in turn creates a socket
connection to the {productName} IIOP port. The reader thread is
started on the server ORB to service IIOP requests from this client.
Using the `initialContext`, the client code does a lookup of an EJB
deployed on the server. An IOR which is a remote reference to the
deployed EJB on the server is returned to the client. Using this object
reference, the client code invokes remote methods on the EJB.

`InitialContext` lookup for the bean and the method invocations
translate the marshalling application request data in Java into IIOP
message(s) that are sent on the socket connection that was created
earlier on to the server ORB. The server then creates a response and
sends it back on the same connection. This data in the response is then
un-marshalled by the client ORB and given back to the client code for
processing. The Client ORB shuts down and closes the connection when the
rich client application exits.

[[abegw]][[GSPTG00201]][[monitoring-the-orb]]

==== Monitoring the ORB

ORB statistics are disabled by default. To gather ORB statistics, enable
monitoring with the following `asadmin` command:

[source]
----
set serverInstance.iiop-service.orb.system.monitoringEnabled=true
reconfig serverInstance
----

If using the Administration Console, you can enable ORB monitoring on
the Configurations>configuration-name>Monitoring page. To view ORB
monitoring statistics through the Administration Console, navigate to
the server (Admin Server) page and click the Monitor tab. Refer to the
Administration Console online help for complete instructions.

The following statistics are of particular interest when tuning the ORB:

* link:#abegx[Connection Statistics]
* link:#abegy[Thread Pools]

[[abegx]][[GSPTG00136]][[connection-statistics]]

===== Connection Statistics

The following statistics are gathered on ORB connections:

* `total-inbound-connections`: Total inbound connections to ORB.
* `total-outbound-connections`: Total outbound connections from ORB.

Use the following command to get ORB connection statistics:

[source]
----
asadmin get --monitor
    serverInstance.iiop-service.orb.system.orb-connection.*
----

[[abegy]][[GSPTG00137]][[thread-pools]]

===== Thread Pools

The following statistics are gathered on ORB thread pools:

* `thread-pool-size`: Number of threads in ORB thread pool.
* `waiting-thread-count`: Number of thread pool threads waiting for work to arrive.

Use the following command to display ORB thread pool statistics:

[source]
----
asadmin get --monitor
    serverInstance.iiop-service.orb.system.orb-thread-pool.*
----

[[abegz]][[GSPTG00202]][[tuning-the-orb]]

==== Tuning the ORB

Tune ORB performance by setting ORB parameters and ORB thread pool
parameters. You can often decrease response time by leveraging
load-balancing, multiple shared connections, thread pool and message
fragment size. You can improve scalability by load balancing between
multiple ORB servers from the client, and tuning the number of
connection between the client and the server.

The following topics are addressed here:

* link:#abeha[Tunable ORB Parameters]
* link:#abehb[ORB Thread Pool Parameters]
* link:#abehc[Client ORB Properties]
* link:#abehg[Thread Pool Sizing]
* link:#abehh[Examining IIOP Messages]

[[abeha]][[GSPTG00138]][[tunable-orb-parameters]]

===== Tunable ORB Parameters

You can tune ORB parameters using the instructions in
"link:administration-guide/orb.html#GSADG00018[Administering the Object Request Broker (ORB)]" in
{productName} Administration Guide. If using the
Administration Console, navigate to the
Configurations>configuration-name>ORB node and refer to the online help.

The following table summarizes the tunable ORB parameters.

[[sthref8]][[gacma]]

Table 3-2 Tunable ORB Parameters

[width="100%",cols="<33%,<27%,<40%",options="header",]
|===
|Path |ORB Modules |Server Settings
|RMI/ IIOP from application client to application server |communication
infrastructure, thread pool |steady-thread-pool-size,
max-thread-pool-size, idle-thread-timeout-in-seconds

|RMI/ IIOP from ORB to {productName} |communication infrastructure,
thread pool |steady-thread-pool-size, max-thread-pool-size,
idle-thread-timeout-in-seconds

|RMI/ IIOP from a vendor ORB |parts of communication infrastructure,
thread pool |steady-thread-pool-size, max-thread-pool-size,
idle-thread-timeout-in-seconds

|In-process |thread pool |steady-thread-pool-size, max-thread-pool-size,
idle-thread-timeout-in-seconds
|===


[[abehb]][[GSPTG00139]][[orb-thread-pool-parameters]]

===== ORB Thread Pool Parameters

The ORB thread pool contains a task queue and a pool of threads. Tasks
or jobs are inserted into the task queue and free threads pick tasks
from this queue for execution. Do not set a thread pool size such that
the task queue is always empty. It is normal for a large application's
Max Pool Size to be ten times the size of the current task queue.

The {productName} uses the ORB thread pool to:

* Execute every ORB request
* Trim EJB pools and caches
* Execute MDB requests

Thus, even when one is not using ORB for remote-calls (via RMI/ IIOP),
set the size of the threadpool to facilitate cleaning up the EJB pools
and caches.

You can set ORB thread pool attributes using the instructions in
"link:administration-guide/threadpools.html#GSADG00008[Administering Thread Pools]" in {productName} Administration Guide. If using the Administration
Console, navigate to Configurations>configuration-name> Thread
Pools>thread-pool-name, where thread-pool-name is the thread pool ID
selected for the ORB. Thread pools have the following attributes that
affect performance.

* Minimum Pool Size: The minimum number of threads in the ORB thread
pool. Set to the average number of threads needed at a steady (RMI/IIOP) load.
* Maximum Pool Size: The maximum number of threads in the ORB thread pool.
* Idle Timeout: Number of seconds to wait before removing an idle thread from pool.
Allows shrinking of the thread pool.
* Number of Work Queues

In particular, the maximum pool size is important to performance. For
more information, see link:#abehg[Thread Pool Sizing].

[[abehc]][[GSPTG00140]][[client-orb-properties]]

===== Client ORB Properties

Specify the following properties as command-line arguments when
launching the client program. You do this by using the following syntax
when starting the Java VM:

[source]
----
-Dproperty=value
----

The following topics are addressed here:

* link:#abehd[Controlling Connections Between Client and Server ORB]
* link:#CEGDGBBG[Limiting the Maximum Number of Client Connections]
* link:#abehf[Load Balancing]

[[abehd]][[GSPTG00025]][[controlling-connections-between-client-and-server-orb]]

Controlling Connections Between Client and Server ORB

When using the default JDK ORB on the client, a connection is
established from the client ORB to the application server ORB every time
an initial context is created. To pool or share these connections when
they are opened from the same process by adding to the configuration on
the client ORB.

[source]
----
-Djava.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
----

[[CEGDGBBG]][[limiting-the-maximum-number-of-client-connections]]

Limiting the Maximum Number of Client Connections

You can specify the total maximum number of client connections on all
ORB listener ports (TCP, SSL and SSL with mutual authentication). When
open client connections exceed the maximum value you specify, the ORB
rejects any new incoming client connections.

Set this value to support the expected number of simultaneous client
connections, but not to exceed the VM or system file descriptor limits.
If the value is set too high, the ORB will continue accepting new client
connections, resulting in a "too many open files" error if the VM runs
out of file descriptors.

To specify the maximum number of client connections, set the
`configs.config.``config-name.``iiop-service.orb.max-connections`
attribute to the number that you require:

[source]
----
asadmin> set configs.config.config-name.iiop-service.orb.max-connections=max-connections
----

config-name::
  The name of the configuration in which the IIOP service is defined.
  For example, `server-config` is the name for the configuration of the
  domain administration server (DAS).
max-connections::
  An integer that specifies the maximum number of client connections.

For updates to this value to take effect, restart {productName}.

The following example shows how to set the maximum number of client
connections for the ORB in the DAS to `512`:

[source]
----
asadmin> set configs.config.server-config.iiop-service.orb.max-connections=512
configs.config.server-config.iiop-service.orb.max-connections=512
Command set executed successfully.
----

[[abehf]][[GSPTG00026]][[load-balancing]]

Load Balancing

For information on how to configure HTTP load balancing, see
"link:ha-administration-guide/http-load-balancing.html#GSHAG00009[Configuring HTTP Load Balancing]" in {productName} High Availability Administration Guide.

For information on how to configure RMI/IIOP for multiple application
server instances in a cluster, "link:ha-administration-guide/rmi-iiop.html#GSHAG00013[RMI-IIOP Load Balancing
and Failover]" in {productName} High Availability
Administration Guide.

When tuning the client ORB for load-balancing and connections, consider
the number of connections opened on the server ORB. Start from a low
number of connections and then increase it to observe any performance
benefits. A connection to the server translates to an ORB thread reading
actively from the connection (these threads are not pooled, but exist
currently for the lifetime of the connection).

[[abehg]][[GSPTG00141]][[thread-pool-sizing]]

===== Thread Pool Sizing

After examining the number of inbound and outbound connections as
explained above, tune the size of the thread pool appropriately. This
can affect performance and response times significantly.

The size computation takes into account the number of client requests to
be processed concurrently, the resource (number of CPUs and amount of
memory) available on the machine and the response times required for
processing the client requests.

Setting the size to a very small value can affect the ability of the
server to process requests concurrently, thus affecting the response
times since requests will sit longer in the task queue. On the other
hand, having a large number of worker threads to service requests can
also be detrimental because they consume system resources, which
increases concurrency. This can mean that threads take longer to acquire
shared structures in the EJB container, thus affecting response times.

The worker thread pool is also used for the EJB container's housekeeping
activity such as trimming the pools and caches. This activity needs to
be accounted for also when determining the size. Having too many ORB
worker threads is detrimental for performance since the server has to
maintain all these threads. The idle threads are destroyed after the
idle thread timeout period.

[[abehh]][[GSPTG00142]][[examining-iiop-messages]]

===== Examining IIOP Messages

It is sometimes useful to examine the IIOP messages passed by the
{productName}. To make the server save IIOP messages to the
`server.log` file, set the JVM option `-Dcom.sun.CORBA.ORBDebug=giop`.
Use the same option on the client ORB.

The following is an example of IIOP messages saved to the server log.
Note: in the actual output, each line is preceded by the timestamp, such
as `[29/Aug/2002:22:41:43] INFO (27179): CORE3282: stdout`.

[source]
----
 ++++++++++++++++++++++++++++++
 Message(Thread[ORB Client-side Reader, conn to 192.18.80.118:1050,5,main]):
createFromStream: type is 4 <
 MessageBase(Thread[ORB Client-side Reader, conn to 192.18.80.118:1050,5,main]):
Message GIOP version: 1.2
 MessageBase(Thread[ORB Client-side Reader, conn to 192.18.80.118:1050,5,main]):
ORB Max GIOP Version: 1.2
 Message(Thread[ORB Client-side Reader, conn to 192.18.80.118:1050,5,main]):
createFromStream: message construction complete.
 com.sun.corba.ee.internal.iiop.MessageMediator
(Thread[ORB Client-side Reader, conn to 192.18.80.118:1050,5,main]): Received message:
 ----- Input Buffer -----
 Current index: 0
 Total length : 340
 47 49 4f 50 01 02 00 04 0 0 00 01 48 00 00 00 05 GIOP.......H....
----


[NOTE]
====
The flag `-Dcom.sun.CORBA.ORBdebug=giop` generates many debug messages
in the logs. This is used only when you suspect message fragmentation.
====


In this sample output above, the `createFromStream` type is shown as
`4`. This implies that the message is a fragment of a bigger message. To
avoid fragmented messages, increase the fragment size. Larger fragments
mean that messages are sent as one unit and not as fragments, saving the
overhead of multiple messages and corresponding processing at the
receiving end to piece the messages together.

If most messages being sent in the application are fragmented,
increasing the fragment size is likely to improve efficiency. On the
other hand, if only a few messages are fragmented, it might be more
efficient to have a lower fragment size that requires smaller buffers
for writing messages.

[[abehp]][[GSPTG00067]][[resource-settings]]

=== Resource Settings

Tuning JDBC and connector resources can significantly improve {productName} performance.

The following topics are addressed here:

* link:#abehq[JDBC Connection Pool Settings]
* link:#abehy[Connector Connection Pool Settings]

[[abehq]][[GSPTG00203]][[jdbc-connection-pool-settings]]

==== JDBC Connection Pool Settings

For optimum performance of database-intensive applications, tune the
JDBC Connection Pools managed by the {productName}. These connection
pools maintain numerous live database connections that can be reused to
reduce the overhead of opening and closing database connections. This
section describes how to tune JDBC Connection Pools to improve
performance.

J2EE applications use JDBC Resources to obtain connections that are
maintained by the JDBC Connection Pool. More than one JDBC Resource is
allowed to refer to the same JDBC Connection Pool. In such a case, the
physical connection pool is shared by all the resources.

Refer to "link:administration-guide/jdbc.html#GSADG00015[Administering Database Connectivity]" in
{productName} Administration Guide for more
information about managing JDBC connection pools.

The following topics are addressed here:

* link:#abehr[Monitoring JDBC Connection Pools]
* link:#abehs[Tuning JDBC Connection Pools]

[[abehr]][[GSPTG00143]][[monitoring-jdbc-connection-pools]]

===== Monitoring JDBC Connection Pools

Statistics-gathering is disabled by default for JDBC Connection Pools.
Refer to for instructions on enabling JDBC monitoring in
"link:administration-guide/monitoring.html#GSADG00011[Administering the Monitoring Service]" in {productName} Administration Guide. If using the
Administration Console, JDBC monitoring can be enabled on the
Configurations>configuration-name>Monitoring page.

The following attributes are monitored:

* `numConnFailedValidation (count)` Number of connections that failed
validation.
* `numConnUsed (range)` Number of connections that have been used.
* `numConnFree (count)` Number of free connections in the pool.
* `numConnTimedOut (bounded range)` Number of connections in the pool
that have timed out.

To get JDBC monitoring statistics, use the following commands:

[source]
----
asadmin get --monitor=true
serverInstance.resources.jdbc-connection-pool.*asadmin get
--monitor=true serverInstance.resources.jdbc-connection-pool. poolName.* *
----

To view JDBC monitoring statistics through the Administration Console,
navigate to the server (Admin Server) page and click the Monitor tab.
Refer to the Administration Console online help for complete
instructions.

[[abehs]][[GSPTG00144]][[tuning-jdbc-connection-pools]]

===== Tuning JDBC Connection Pools

Refer to "link:administration-guide/jdbc.html#GSADG00015[Administering Database Connectivity]" in
{productName} Administration Guide for
instructions on configuring JDBC connection pools. If using the
{productName} Administration Console by navigating to the
Resources>JDBC>JDBC Connection Pools>jdbc-pool-name page and then
clicking the desired tab.

The following JDBC properites affect {productName} performance:

* link:#abeht[Pool Size Settings]
* link:#abehu[Timeout Settings]
* link:#abehv[Isolation Level Settings]
* link:#abehw[Connection Validation Settings]

[[abeht]][[GSPTG00027]][[pool-size-settings]]

Pool Size Settings

Pool Size settings can be configured in the Pool Settings section on the
General tab in the Edit JDBC Connection Pool page.

The following settings control the size of the connection pool:

* Initial and Mimimum Pool Size: Size of the pool when created, and its
minimum allowable size.
* Maximum Pool Size: Upper limit of size of the pool.
* Pool Resize Quantity: Number of connections to be removed when the
idle timeout expires. Connections that have idled for longer than the
timeout are candidates for removal. When the pool size reaches the
initial and minimum pool size, removal of connections stops.

The following table summarizes advantages and disadvantages to consider
when sizing connection pools.

[[sthref9]][[gacmi]]

Table 3-3 Connection Pool Sizing

[width="100%",cols="<21%,<38%,<41%",options="header",]
|===
|Connection Pool |Advantages |Disadvantages
|Small Connection pool |Faster access on the connection table. a|
May not have enough connections to satisfy requests.

Requests may spend more time in the queue.

|Large Connection pool a|
More connections to fulfill requests.

Requests will spend less (or no) time in the queue

 |Slower access on the connection table.
|===


[[abehu]][[GSPTG00028]][[timeout-settings]]

Timeout Settings

The following JDBC timeout settings can be configured on the in the Pool
Settings section on the General tab in the Edit JDBC Connection Pool
page.

* Max Wait Time: Amount of time the caller (the code requesting a
connection) will wait before getting a connection timeout. The default
is 60 seconds. A value of zero forces caller to wait indefinitely.
+
To improve performance set Max Wait Time to zero (0). This essentially
blocks the caller thread until a connection becomes available. Also,
this allows the server to alleviate the task of tracking the elapsed
wait time for each request and increases performance.
* Idle Timeout: Maximum time in seconds that a connection can remain
idle in the pool. After this time, the pool can close this connection.
This property does not control connection timeouts on the database
server.
+
Keep this timeout shorter than the database server timeout (if such
timeouts are configured on the database), to prevent accumulation of
unusable connection in {productName}.
+
For best performance, set Idle Timeout to zero (0) seconds, so that idle
connections will not be removed. This ensures that there is normally no
penalty in creating new connections and disables the idle monitor
thread. However, there is a risk that the database server will reset a
connection that is unused for too long.

[[abehv]][[GSPTG00029]][[isolation-level-settings]]

Isolation Level Settings

The following JDBC Isolation Level settings can be configured in the
Transaction section on the General tab in the Edit JDBC Connection Pool
page.

* Transaction Isolation: Specifies the transaction isolation level of
the pooled database connections. If this parameter is unspecified, the
pool uses the default isolation level provided by the JDBC Driver.
* Isolation Level Guaranteed: Guarantees that every connection obtained
from the pool has the isolation specified for the Transaction Isolation
level. Applicable only when the Transaction Isolation level is
specified. The default value is Guaranteed.
+
This setting can have some performance impact on some JDBC drivers. Set
to false when certain that the application does not change the isolation
level before returning the connection.

Avoid specifying the Transaction Isolation level. If that is not
possible, consider disabling the Isolation Level Guaranteed option and
then make sure applications do not programmatically alter the
connections; isolation level.

If you must specify a Transaction Isolation level, specify the
best-performing level possible. The isolation levels listed from best
performance to worst are:

1. `READ_UNCOMMITTED`
2. `READ_COMMITTED`
3. `REPEATABLE_READ`
4. `SERIALIZABLE`

Choose the isolation level that provides the best performance, yet still
meets the concurrency and consistency needs of the application.

[[abehw]][[GSPTG00030]][[connection-validation-settings]]

Connection Validation Settings

JDBC Connection Validation settings can be configured in the Connection
Validation section on the Advanced tab in the Edit JDBC Connection Pool
page.

* Connection Validation Required: If enabled, the pool validates
connections (checks to find out if they are usable) before providing
them to an application.
+
If possible, keep this option disabled. Requiring connection validation
forces the server to apply the validation algorithm every time the pool
returns a connection, which adds overhead to the latency of
`getConnection()`. If the database connectivity is reliable, you can
omit validation.
* Validation Method: Specifies the type of connection validation to
perform. Must be one of the following:

** `auto-commit`: Attempt to perform an auto-commit on the connection.

** `metadata`: Attempt to get metadata from the connection.

** `table`: Performing the query on a specified table. If this option is
selected, Table Name must also be set. Choosing this option may be
necessary if the JDBC driver caches calls to `setAutoCommit()` and
`getMetaData()`.

** `custom-validation`: Define a custom validation method.
* Table Name: Name of the table to query when the Validation Method is
set to `table`.
* Close All Connections On Any Failure: Specify whether all connections
in the pool should be closed if a single validation check fails. This
option is disabled by default. One attempt will be made to re-establish
failed connections.

[[abehy]][[GSPTG00204]][[connector-connection-pool-settings]]

==== Connector Connection Pool Settings

From a performance standpoint, connector connection pools are similar to
JDBC connection pools. Follow all the recommendations in the previous
section, link:#abehs[Tuning JDBC Connection Pools].

[[abehz]][[GSPTG00145]][[transaction-support]]

===== Transaction Support

You may be able to improve performance by overriding the default
transaction support specified for each connector connection pool.

For example, consider a case where an Enterprise Information System
(EIS) has a connection factory that supports local transactions with
better performance than global transactions. If a resource from this EIS
needs to be mixed with a resource coming from another resource manager,
the default behavior forces the use of XA transactions, leading to lower
performance. However, by changing the EIS's connector connection pool to
use LocalTransaction transaction support and leveraging the Last Agent
Optimization feature previously described, you could leverage the
better-performing EIS LocalTransaction implementation. For more
information on LAO, see link:tuning-apps.html#abecq[Configure JDBC
Resources as One-Phase Commit Resources].

You can specify transaction support when you create or edit a connector
connection pool.

Also set transaction support using `asadmin`. For example, the following
`asadmin` command could be used to create a connector connection pool
`TESTPOOL` with `transaction-support` set to `LOCAL`.

[source]
----
asadmin> create-connector-connection-pool --raname jdbcra
--connectiondefinition javax.sql.DataSource
-transactionsupport LocalTransaction
TESTPOOL
----

[[gkxvd]][[GSPTG00068]][[load-balancer-settings]]

=== Load Balancer Settings

{productName} is compatible with the Apache HTTP
server `mod_jk` module for load balancing.

{productName} load balancing configurations can vary widely depending
on the needs of your enterprise and are beyond the scope of this
Performance Tuning Guide. For complete information about configuring
load balancing in {productName}, refer to the following
documentation:

* "link:ha-administration-guide/http-load-balancing.html#GSHAG00009[Configuring HTTP Load Balancing]" in {productName} High Availability Administration Guide
* "link:ha-administration-guide/rmi-iiop.html#GSHAG00013[RMI-IIOP Load Balancing and Failover]" in {productName} High Availability Administration Guide
