KBEC-00361 - 32-bit vs 64-bit JVM Memory usage

Problem

Any operation in the Flow server (UI or command line), seems to throw a LazyInitializationException like this

InternalError: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role:
... followed by a stack trace for action attempted

Debugging

Files to consider

/conf/wrapper.conf

/logs/commander.log

1. Check the available memory in the Host. 

2. Check the following lines in wrapper.conf that indicate memory allocation:

# Initial Java Heap Size (in %)
wrapper.java.initmemory.percent=50

# Initial Java Heap Size (in mb)
#wrapper.java.initmemory=2048

# Maximum Java Heap Size (in %)
wrapper.java.maxmemory.percent=50

# Maximum Java Heap Size (in mb)
#wrapper.java.maxmemory=4096

 

3. Check if the allocated amount of memory matches the values reported in commander.log

--> commander.log contains snippets of memory usage every 15 minutes in this format

G1 Old Gen           usage       293.92 MB   1.724 GB   1.895 GB   2.000 GB
G1 Old Gen           collection       0  B       0  B   1.895 GB   2.000 GB
G1 Old Gen           peak        293.92 MB   1.895 GB   1.895 GB   2.000 GB

--> Make sure G1 Old Gen Max setting matches the % value set in wrapper.conf

Solution

If you notice that Max value does not increase about 2.0 GB, then its because the JVM being used is 32-bit. 

Run "uname -a" to get details about the OS itself. If the JVM is 32-bit, the swap space cannot be configured for more than 2GB. 

A PAE kernel allows Linux to see all the RAM, but it does not change the fact that each individual process is a 32-bit process, and thus can only run the 32-bit JVM. A 32-bit JVM is constrained to a maximum of 2GB of heap space; there is no way to get around that so the only solution if you need more heap for a single process is to upgrade to a full 64-bit OS that can support the 64-bit JVM.

 

 

Have more questions?

0 Comments

Please sign in to leave a comment.