Recommended Maximum Heap Sizes on 32 and 64 bit WebSphere Java instances
One of the most common questions asked in WebSphere Java support is, "What is the recommended Maximum Heap size?"
One of the most common problems reported in WebSphere Java support is, "OutofMemory" condition (Java or Native).
This blog is simply a starting point or general reference 
based upon daily observations in the technical support arena, it is not 
intended to be a solution for every situation, but moreover a general 
set of starting recommendations.
Ideally, you will need to test appropriate values in your 
own environments and topologies, based upon application architecture, 
number of applications running, how busy the AppServer is and underlying
 load conditions, how much physical memory or RAM is installed and 
running, how many JVMs are being hosted and what other additional Java 
and native memory processes are running on the same machine.
For 32 bit platforms and Java stacks in 
general, the recommended Maximum Heap range for WebSphere Application 
Server (WAS), would be between (1024M - 1536M) or (1G - 1.5G); higher 
values will most likely eventually result in Native Memory contention. 
For Node Agents and Deployment Manager, depending upon how many nodes 
are managed serviced and how many application deployments occur, you can
 probably utilize less heap memory, between (512M - 1024M) or (.5G - 1G)
 may suffice. *But the Default out-of-the-box configuration value of 
256M is most likely too low a value in most use-case scenarios.
*Remember that the WAS Java process shares a 4 Gigabyte 
memory address space with the OS in accordance with 32 bit design 
specification (User Virtual Memory is 2G).
Application Server       1024M - 1536M                  
Deployment Manager    512M - 1024M
Node Agen
For 64 bit platforms and Java stacks in 
general, the recommended Maximum Heap range for WebSphere Application 
Server, would be between (4096M - 8192M) or (4G - 8G). For Node Agents 
and Deployment Manager, depending upon how many nodes are managed 
serviced and how many application deployments occur, you can probably 
utilize less heap memory, between (2048M - 4096M) or (2G - 4G).
*Remember that the WAS Java process shares a 16 Terabyte 
memory address space with the OS in accordance with 64 bit design 
specification (User Virtual Memory is 8T).
Application Server       4096M - 8192M                 
Deployment Manager  2048M - 4096M
Node Agen
Now regarding the Minimum Heap value, we have found that 
when using the newer product versions WAS v8.x and v9.x with default GC 
Policy of GENCON, setting a 'Fixed Heap' works and performs best 
(Maximum Heap Size = Minimum Heap Size) as well as a 'Fixed Nursery'. 
You can fix the nursery size with a Generic JVM argument of -Xmn####m 
(example: -Xmn1024m for a 1Gb nursery region). Without -Xmn, the nursery
 region defaults to approximately 25% of the max heap size, but it is 
Variable and not Fixed. The concept of the GENCON GC Policy resizing 
heap regions was to keep them smaller for faster GC Cycles, but we have 
found out that in practice the overhead of this resizing often makes GC 
very inefficient. To navigate to the right area to set -Xmn, see "Setting generic JVM arguments in WebSphere Application Server."
The Heap values can be set any number of ways depending 
upon the actual product version of WebSphere, but typically from the 
Admin Console JVM process settings, from the Generic JVM Args (-Xmx 
-Xms), WSAdmin command-line interface, Startup and Deployment scripts, 
manual server.xml modification (not recommended) and so forth; more 
details and step-by-step instructions can be found in the corresponding 
WebSphere product documentation based upon product version, as well as 
related developWorks articles and Blog entries.
*Please also keep in mind that the overall WAS JVM Process 
Size or Memory Footprint will typically be larger than Maximum Heap size
 (upwards of 1.5x), simply because it includes not only the Java Heap, 
but also underlying Classes and Jars, Threads and Stacks, Monitors, 
generated JIT code, malloc'd JNI Native Memory calls and so forth. For 
example:
- 
-Xmx4G (process size could be around 6G on a busy AppServer)
 
- 
-Xmx8G (process size could be around 12G on a busy AppServer)
 
Caveat: This blog entry was primarily created for WebSphere
 Base and Network Deployment full version products, but I wanted to also
 quickly point out that when using some of our stack products such as 
Business Process Monitor (BPM), eXtreme Scale, Portal, Process Server, 
the Maximum Heap sizes or ranges may need to be a bit larger than what I
 specified above.
Comments
Post a Comment