I have a pure java process which is running on SUSE Linux installed on a VM (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 (only if JVM has some leaks).
I am not able to understand why the process is holding on to 900 MB of virtual memory.
More details about the process is given below -
The process spawns around 40 Java threads to handle incoming HTTP requests.
It uses Java sockets to communicate to the back end.
Any suggestions on how to proceed with the investigation will be highly appreciated.