Friday, February 25, 2011

Great set of articles on Native Memory

I am currently helping a customer with a native memory issue causing OutOfMemory (OOM) exceptions. Most folks are familiar with Java heap memory issues (eg. too much caching eating up live memory or leaking objects), but native memory is also important especially when your application isn't so "pure" (spawning threads, lots of JNI, etc). How do you know if you have a native out of memory? You'll see that you'll get out of memory conditions when the Java heap still has plenty of room left over. In the case I'm working on now, we actually saw the out of memory well before the memory in the heap grew to the maximum size (-Xmx) of the heap. In trying to help the customer out, I found the following articles excellent. The first is a very good overview of native memory and how to diagnose. The second is our app server tech note on things to try in the case you believe you have a native memory issue.

Thanks for the memory - Understanding how the JVM uses native memory on Windows and Linux (Windows/Linux version, AIX version).

Troubleshooting native memory issues