| type=page | |
| status=published | |
| title=Overview of GlassFish Server Performance Tuning | |
| next=tuning-apps.html | |
| prev=preface.html | |
| ~~~~~~ | |
| Overview of GlassFish Server Performance Tuning | |
| =============================================== | |
| [[GSPTG00003]][[giekg]] | |
| [[overview-of-glassfish-server-performance-tuning]] | |
| 1 Overview of GlassFish Server Performance Tuning | |
| ------------------------------------------------- | |
| You can significantly improve performance of the Oracle GlassFish Server | |
| and of applications deployed to it by adjusting a few deployment and | |
| server configuration settings. However, it is important to understand | |
| the environment and performance goals. An optimal configuration for a | |
| production environment might not be optimal for a development | |
| environment. | |
| The following topics are addressed here: | |
| * link:#abear[Process Overview] | |
| * link:#abeat[Understanding Operational Requirements] | |
| * link:#abeba[General Tuning Concepts] | |
| * link:#abebd[Further Information] | |
| [[abear]][[GSPTG00048]][[process-overview]] | |
| Process Overview | |
| ~~~~~~~~~~~~~~~~ | |
| The following table outlines the overall GlassFish Server 4.0 | |
| administration process, and shows where performance tuning fits in the | |
| sequence. | |
| [[sthref4]][[gacmh]] | |
| Table 1-1 Performance Tuning Roadmap | |
| [width="154%",cols="<40%,<28%,<32%",options="header",] | |
| |======================================================================= | |
| |Step |Description of Task |Location of Instructions | |
| |1 |Design: Decide on the high-availability topology and set up | |
| GlassFish Server. a| | |
| link:../deployment-planning-guide/toc.html#GSPLG[GlassFish Server Open Source Edition Deployment Planning | |
| Guide] | |
| |2 |Capacity Planning: Make sure the systems have sufficient resources | |
| to perform well. a| | |
| link:../deployment-planning-guide/toc.html#GSPLG[GlassFish Server Open Source Edition Deployment Planning | |
| Guide] | |
| |3 |Installation: Configure your DAS, clusters, and clustered server | |
| instances. a| | |
| link:../installation-guide/toc.html#GSING[GlassFish Server Open Source Edition Installation Guide] | |
| |4 |Deployment: Install and run your applications. Familiarize yourself | |
| with how to configure and administer the GlassFish Server. a| | |
| The following books: | |
| * link:../application-deployment-guide/toc.html#GSDPG[GlassFish Server Open Source Edition Application | |
| Deployment Guide] | |
| * link:../administration-guide/toc.html#GSADG[GlassFish Server Open Source Edition Administration Guide] | |
| |5 |High Availability Configuration: Configuring your DAS, clusters, and | |
| clustered server instances for high availability and failover a| | |
| link:../ha-administration-guide/toc.html#GSHAG[GlassFish Server Open Source Edition High Availability | |
| Administration Guide] | |
| |6 a| | |
| Performance Tuning: Tune the following items: | |
| * Applications | |
| * GlassFish Server | |
| * Java Runtime System | |
| * Operating system and platform | |
| a| | |
| The following chapters: | |
| * link:tuning-apps.html#abebe[Tuning Your Application] | |
| * link:tuning-glassfish.html#abedn[Tuning the GlassFish Server] | |
| * link:tuning-java.html#abeia[Tuning the Java Runtime System] | |
| * link:tuning-os.html#abeir[Tuning the Operating System and Platform] | |
| |======================================================================= | |
| [[abeas]][[GSPTG00035]][[performance-tuning-sequence]] | |
| Performance Tuning Sequence | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| Application developers should tune applications prior to production use. | |
| Tuning applications often produces dramatic performance improvements. | |
| System administrators perform the remaining steps in the following list | |
| after tuning the application, or when application tuning has to wait and | |
| you want to improve performance as much as possible in the meantime. | |
| Ideally, follow this sequence of steps when you are tuning performance: | |
| 1. Tune your application, described in | |
| link:tuning-apps.html#abebe[Tuning Your Application]. | |
| 2. Tune the server, described in link:tuning-glassfish.html#abedn[Tuning | |
| the GlassFish Server]. | |
| 3. Tune the Java runtime system, described in | |
| link:tuning-java.html#abeia[Tuning the Java Runtime System]. | |
| 4. Tune the operating system, described in | |
| link:tuning-os.html#abeir[Tuning the Operating System and Platform]. | |
| [[abeat]][[GSPTG00049]][[understanding-operational-requirements]] | |
| Understanding Operational Requirements | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Before you begin to deploy and tune your application on the GlassFish | |
| Server, it is important to clearly define the operational environment. | |
| The operational environment is determined by high-level constraints and | |
| requirements such as: | |
| * link:#abeau[Application Architecture] | |
| * link:#abeav[Security Requirements] | |
| * link:#gkvjf[High Availability Clustering, Load Balancing, and | |
| Failover] | |
| * link:#abeay[Hardware Resources] | |
| * link:#abeaz[Administration] | |
| [[abeau]][[GSPTG00154]][[application-architecture]] | |
| Application Architecture | |
| ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| The Java EE Application model, as shown in the following figure, is very | |
| flexible; allowing the application architect to split application logic | |
| functionally into many tiers. The presentation layer is typically | |
| implemented using servlets and JSP technology and executes in the web | |
| container. | |
| [[GSPTG00001]][[gacmj]] | |
| .*Figure 1-1 Java EE Application Model* | |
| image:img/appmodel.png[ | |
| "Java EE Application Mode"] | |
| Moderately complex enterprise applications can be developed entirely | |
| using servlets and JSP technology. More complex business applications | |
| often use Enterprise JavaBeans (EJB) components. The GlassFish Server | |
| integrates the Web and EJB containers in a single process. Local access | |
| to EJB components from servlets is very efficient. However, some | |
| application deployments may require EJB components to execute in a | |
| separate process; and be accessible from standalone client applications | |
| as well as servlets. Based on the application architecture, the server | |
| administrator can employ the GlassFish Server in multiple tiers, or | |
| simply host both the presentation and business logic on a single tier. | |
| It is important to understand the application architecture before | |
| designing a new GlassFish Server deployment, and when deploying a new | |
| business application to an existing application server deployment. | |
| [[abeav]][[GSPTG00155]][[security-requirements]] | |
| Security Requirements | |
| ^^^^^^^^^^^^^^^^^^^^^ | |
| Most business applications require security. This section discusses | |
| security considerations and decisions. | |
| [[abeaw]][[GSPTG00080]][[user-authentication-and-authorization]] | |
| User Authentication and Authorization | |
| +++++++++++++++++++++++++++++++++++++ | |
| Application users must be authenticated. The GlassFish Server provides a | |
| number of choices for user authentication, including file-based, | |
| administration, LDAP, certificate, JDBC, digest, PAM, Solaris, and | |
| custom realms. | |
| The default file based security realm is suitable for developer | |
| environments, where new applications are developed and tested. At | |
| deployment time, the server administrator can choose between the | |
| Lighweight Directory Access Protocol (LDAP) or Solaris security realms. | |
| Many large enterprises use LDAP-based directory servers to maintain | |
| employee and customer profiles. Small to medium enterprises that do not | |
| already use a directory server may find it advantageous to leverage | |
| investment in Solaris security infrastructure. | |
| For more information on security realms, see | |
| "link:../security-guide/user-security.html#GSSCG00151[Administering Authentication Realms]" in GlassFish | |
| Server Open Source Edition Security Guide. | |
| The type of authentication mechanism chosen may require additional | |
| hardware for the deployment. Typically a directory server executes on a | |
| separate server, and may also require a backup for replication and high | |
| availability. Refer to the | |
| http://www.oracle.com/us/products/middleware/identity-management/oracle-directory-services/index.html[Oracle | |
| Java System Directory Server] | |
| (`http://www.oracle.com/us/products/middleware/identity-management/oracle-directory-services/index.html`) | |
| documentation for more information on deployment, sizing, and | |
| availability guidelines. | |
| An authenticated user's access to application functions may also need | |
| authorization checks. If the application uses the role-based Java EE | |
| authorization checks, the application server performs some additional | |
| checking, which incurs additional overheads. When you perform capacity | |
| planning, you must take this additional overhead into account. | |
| [[abeax]][[GSPTG00081]][[encryption]] | |
| Encryption | |
| ++++++++++ | |
| For security reasons, sensitive user inputs and application output must | |
| be encrypted. Most business-oriented web applications encrypt all or | |
| some of the communication flow between the browser and GlassFish Server. | |
| Online shopping applications encrypt traffic when the user is completing | |
| a purchase or supplying private data. Portal applications such as news | |
| and media typically do not employ encryption. Secure Sockets Layer (SSL) | |
| is the most common security framework, and is supported by many browsers | |
| and application servers. | |
| The GlassFish Server supports SSL 2.0 and 3.0 and contains software | |
| support for various cipher suites. It also supports integration of | |
| hardware encryption cards for even higher performance. Security | |
| considerations, particularly when using the integrated software | |
| encryption, will impact hardware sizing and capacity planning. | |
| Consider the following when assessing the encryption needs for a | |
| deployment: | |
| * What is the nature of the applications with respect to security? Do | |
| they encrypt all or only a part of the application inputs and output? | |
| What percentage of the information needs to be securely transmitted? | |
| * Are the applications going to be deployed on an application server | |
| that is directly connected to the Internet? Will a web server exist in a | |
| demilitarized zone (DMZ) separate from the application server tier and | |
| backend enterprise systems? + | |
| A DMZ-style deployment is recommended for high security. It is also | |
| useful when the application has a significant amount of static text and | |
| image content and some business logic that executes on the GlassFish | |
| Server, behind the most secure firewall. GlassFish Server provides | |
| secure reverse proxy plugins to enable integration with popular web | |
| servers. The GlassFish Server can also be deployed and used as a web | |
| server in DMZ. | |
| * Is encryption required between the web servers in the DMZ and | |
| application servers in the next tier? The reverse proxy plugins supplied | |
| with GlassFish Server support SSL encryption between the web server and | |
| application server tier. If SSL is enabled, hardware capacity planning | |
| must be take into account the encryption policy and mechanisms. | |
| * If software encryption is to be employed: | |
| ** What is the expected performance overhead for every tier in the | |
| system, given the security requirements? | |
| ** What are the performance and throughput characteristics of various | |
| choices? | |
| For information on how to encrypt the communication between web servers | |
| and GlassFish Server, see "link:../security-guide/message-security.html#GSSCG00037[Administering Message | |
| Security]" in GlassFish Server Open Source Edition Security Guide. | |
| [[gkvjf]][[GSPTG00156]][[high-availability-clustering-load-balancing-and-failover]] | |
| High Availability Clustering, Load Balancing, and Failover | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| GlassFish Server 4.0 enables multiple GlassFish Server instances to be | |
| clustered to provide high availability through failure protection, | |
| scalability, and load balancing. | |
| High availability applications and services provide their functionality | |
| continuously, regardless of hardware and software failures. To make such | |
| reliability possible, GlassFish Server 4.0 provides mechanisms for | |
| maintaining application state data between clustered GlassFish Server | |
| instances. Application state data, such as HTTP session data, stateful | |
| EJB sessions, and dynamic cache information, is replicated in real time | |
| across server instances. If any one server instance goes down, the | |
| session state is available to the next failover server, resulting in | |
| minimum application downtime and enhanced transactional security. | |
| GlassFish Server provides the following high availability features: | |
| * High Availability Session Persistence | |
| * High Availability Java Message Service | |
| * RMI-IIOP Load Balancing and Failover | |
| See link:tuning-java.html#glaat[Tuning High Availability Persistence] for | |
| high availability persistence tuning recommendations. | |
| See the link:../ha-administration-guide/toc.html#GSHAG[GlassFish Server Open Source Edition High | |
| Availability Administration Guide] for complete information about | |
| configuring high availability clustering, load balancing, and failover | |
| features in GlassFish Server 4.0. | |
| [[abeay]][[GSPTG00157]][[hardware-resources]] | |
| Hardware Resources | |
| ^^^^^^^^^^^^^^^^^^ | |
| The type and quantity of hardware resources available greatly influence | |
| performance tuning and site planning. | |
| GlassFish Server provides excellent vertical scalability. It can scale | |
| to efficiently utilize multiple high-performance CPUs, using just one | |
| application server process. A smaller number of application server | |
| instances makes maintenance easier and administration less expensive. | |
| Also, deploying several related applications on fewer application | |
| servers can improve performance, due to better data locality, and reuse | |
| of cached data between co-located applications. Such servers must also | |
| contain large amounts of memory, disk space, and network capacity to | |
| cope with increased load. | |
| GlassFish Server can also be deployed on large "farms" of relatively | |
| modest hardware units. Business applications can be partitioned across | |
| various server instances. Using one or more external load balancers can | |
| efficiently spread user access across all the application server | |
| instances. A horizontal scaling approach may improve availability, lower | |
| hardware costs and is suitable for some types of applications. However, | |
| this approach requires administration of more application server | |
| instances and hardware nodes. | |
| [[abeaz]][[GSPTG00158]][[administration]] | |
| Administration | |
| ^^^^^^^^^^^^^^ | |
| A single GlassFish Server installation on a server can encompass | |
| multiple instances. A group of one or more instances that are | |
| administered by a single Administration Server is called a domain. | |
| Grouping server instances into domains permits different people to | |
| independently administer the groups. | |
| You can use a single-instance domain to create a "sandbox" for a | |
| particular developer and environment. In this scenario, each developer | |
| administers his or her own application server, without interfering with | |
| other application server domains. A small development group may choose | |
| to create multiple instances in a shared administrative domain for | |
| collaborative development. | |
| In a deployment environment, an administrator can create domains based | |
| on application and business function. For example, internal Human | |
| Resources applications may be hosted on one or more servers in one | |
| Administrative domain, while external customer applications are hosted | |
| on several administrative domains in a server farm. | |
| GlassFish Server supports virtual server capability for web | |
| applications. For example, a web application hosting service provider | |
| can host different URL domains on a single GlassFish Server process for | |
| efficient administration. | |
| For detailed information on administration, see the | |
| link:../administration-guide/toc.html#GSADG[GlassFish Server Open Source Edition Administration Guide]. | |
| [[abeba]][[GSPTG00050]][[general-tuning-concepts]] | |
| General Tuning Concepts | |
| ~~~~~~~~~~~~~~~~~~~~~~~ | |
| Some key concepts that affect performance tuning are: | |
| * User load | |
| * Application scalability | |
| * Margins of safety | |
| The following table describes these concepts, and how they are measured | |
| in practice. The left most column describes the general concept, the | |
| second column gives the practical ramifications of the concept, the | |
| third column describes the measurements, and the right most column | |
| describes the value sources. | |
| [[sthref6]][[gacmp]] | |
| Table 1-2 Factors That Affect Performance | |
| [width="100%",cols="<14%,<13%,<26%,<47%",options="header",] | |
| |======================================================================= | |
| |Concept |In practice |Measurement |Value sources | |
| |User Load |Concurrent sessions at peak load a| | |
| Transactions Per Minute (TPM) | |
| Web Interactions Per Second (WIPS) | |
| a| | |
| (Max. number of concurrent users) * (expected response time) / (time | |
| between clicks) | |
| Example: | |
| (100 users * 2 sec) / 10 sec = 20 | |
| |Application Scalability |Transaction rate measured on one CPU |TPM or | |
| WIPS |Measured from workload benchmark. Perform at each tier. | |
| |Vertical scalability |Increase in performance from additional CPUs | |
| |Percentage gain per additional CPU |Based on curve fitting from | |
| benchmark. Perform tests while gradually increasing the number of CPUs. | |
| Identify the "knee" of the curve, where additional CPUs are providing | |
| uneconomical gains in performance. Requires tuning as described in this | |
| guide. Perform at each tier and iterate if necessary. Stop here if this | |
| meets performance requirements. | |
| |Horizontal scalability |Increase in performance from additional servers | |
| |Percentage gain per additional server process and/or hardware node. | |
| |Use a well-tuned single application server instance, as in previous | |
| step. Measure how much each additional server instance and hardware node | |
| improves performance. | |
| |Safety Margins |High availability requirements |If the system must cope | |
| with failures, size the system to meet performance requirements assuming | |
| that one or more application server instances are non functional | |
| |Different equations used if high availability is required. | |
| | + |Excess capacity for unexpected peaks |It is desirable to operate a | |
| server at less than its benchmarked peak, for some safety margin |80% | |
| system capacity utilization at peak loads may work for most | |
| installations. Measure your deployment under real and simulated peak | |
| loads. | |
| |======================================================================= | |
| [[abebb]][[GSPTG00159]][[capacity-planning]] | |
| Capacity Planning | |
| ^^^^^^^^^^^^^^^^^ | |
| The previous discussion guides you towards defining a deployment | |
| architecture. However, you determine the actual size of the deployment | |
| by a process called capacity planning. Capacity planning enables you to | |
| predict: | |
| * The performance capacity of a particular hardware configuration. | |
| * The hardware resources required to sustain specified application load | |
| and performance. | |
| You can estimate these values through careful performance benchmarking, | |
| using an application with realistic data sets and workloads. | |
| [[gacmz]][[GSPTG00036]][[to-determine-capacity]] | |
| To Determine Capacity | |
| +++++++++++++++++++++ | |
| 1. Determine performance on a single CPU. + | |
| First determine the largest load that a single processor can sustain. | |
| You can obtain this figure by measuring the performance of the | |
| application on a single-processor machine. Either leverage the | |
| performance numbers of an existing application with similar processing | |
| characteristics or, ideally, use the actual application and workload in | |
| a testing environment. Make sure that the application and data resources | |
| are tiered exactly as they would be in the final deployment. | |
| 2. [[CEGHGCGI]] | |
| Determine vertical scalability. | |
| Determine how much additional performance you gain when you add | |
| processors. That is, you are indirectly measuring the amount of shared | |
| resource contention that occurs on the server for a specific workload. | |
| Either obtain this information based on additional load testing of the | |
| application on a multiprocessor system, or leverage existing information | |
| from a similar application that has already been load tested. | |
| Running a series of performance tests on one to eight CPUs, in | |
| incremental steps, generally provides a sense of the vertical | |
| scalability characteristics of the system. Be sure to properly tune the | |
| application, GlassFish Server, backend database resources, and operating | |
| system so that they do not skew the results. | |
| 3. Determine horizontal scalability. + | |
| If sufficiently powerful hardware resources are available, a single | |
| hardware node may meet the performance requirements. However for better | |
| availability, you can cluster two or more systems. Employing external | |
| load balancers and workload simulation, determine the performance | |
| benefits of replicating one well-tuned application server node, as | |
| determined in step link:#CEGHGCGI[2]. | |
| [[abebc]][[GSPTG00160]][[user-expectations]] | |
| User Expectations | |
| ^^^^^^^^^^^^^^^^^ | |
| Application end-users generally have some performance expectations. | |
| Often you can numerically quantify them. To ensure that customer needs | |
| are met, you must understand these expectations clearly, and use them in | |
| capacity planning. | |
| Consider the following questions regarding performance expectations: | |
| * What do users expect the average response times to be for various | |
| interactions with the application? What are the most frequent | |
| interactions? Are there any extremely time-critical interactions? What | |
| is the length of each transaction, including think time? In many cases, | |
| you may need to perform empirical user studies to get good estimates. | |
| * What are the anticipated steady-state and peak user loads? Are there | |
| are any particular times of the day, week, or year when you observe or | |
| expect to observe load peaks? While there may be several million | |
| registered customers for an online business, at any one time only a | |
| fraction of them are logged in and performing business transactions. A | |
| common mistake during capacity planning is to use the total size of | |
| customer population as the basis and not the average and peak numbers | |
| for concurrent users. The number of concurrent users also may exhibit | |
| patterns over time. | |
| * What is the average and peak amount of data transferred per request? | |
| This value is also application-specific. Good estimates for content | |
| size, combined with other usage patterns, will help you anticipate | |
| network capacity needs. | |
| * What is the expected growth in user load over the next year? Planning | |
| ahead for the future will help avoid crisis situations and system | |
| downtimes for upgrades. | |
| [[abebd]][[GSPTG00051]][[further-information]] | |
| Further Information | |
| ~~~~~~~~~~~~~~~~~~~ | |
| * For more information on Java performance, see | |
| http://java.sun.com/docs/performance[Java Performance Documentation] | |
| (`http://java.sun.com/docs/performance`) and | |
| http://java.sun.com/blueprints/performance/index.html[Java Performance | |
| BluePrints] (`http://java.sun.com/blueprints/performance/index.html`). | |
| * For more information about performance tuning for high availability | |
| configurations, see the link:../ha-administration-guide/toc.html#GSHAG[GlassFish Server Open Source Edition | |
| High Availability Administration Guide]. | |
| * For complete information about using the Performance Tuning features | |
| available through the GlassFish Server Administration Console, refer to | |
| the Administration Console online help. | |
| * For details on optimizing EJB components, see | |
| http://java.sun.com/developer/technicalArticles/ebeans/sevenrules/[Seven | |
| Rules for Optimizing Entity Beans] | |
| (`http://java.sun.com/developer/technicalArticles/ebeans/sevenrules/`) | |
| * For details on profiling, see "link:../application-development-guide/setting-up-dev-env.html#GSDVG00341[Profiling Tools]" in | |
| GlassFish Server Open Source Edition Application Development Guide. | |
| * To view a demonstration video showing how to use the GlassFish Server | |
| Performance Tuner, see the | |
| http://www.youtube.com/watch?v=FavsE2pzAjc[Oracle GlassFish Server 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 Oracle GlassFish Server 3.1] | |
| (`http://blogs.oracle.com/jenblog/entry/performance_tuner_in_oracle_glassfish`) | |
| blog. |