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 t 512M - 1024M
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 t 2048M - 4096M
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.
No comments:
Post a Comment