| 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 |