High Virtual Mem usage by pure Java Process running on SUSE
I have a pure java process which is running on SUSE Linux installed on a VM (Vmware Virtual Machine). The max heap of java process is set to 128 MB.
What i am observing is,
- Virtual memory consumed by this process is very high, more than 900MB.
- The Resident memory is below 250MB.
- The process is running for days without any OOM issue. So, there is no java memory leak.
- The process does not use any JNI calls directly. So, chances of native memory leak is less (can happen only if JVM has some leaks).
I am not able to understand why the process is holding on to 900 MB of virtual memory. At present there is lot of swap space left on the machine.
Is the OS behaving lazy here by not reclaiming the virtual memory allocated to processes, until the OS runs out of virtual memory space?
More details about the process is given below -
The process spawns Java threads to handle incoming HTTP requests. I do not see any thread leaks (from thread dump).
It uses Java sockets to communicate to the back end in-memory cache store (Coherence).
Any suggestions on how to proceed with the investigation will be highly appreciated.