Java application dies from time to time with PermGen space error, but when I look at the memory usage it seems low from what I can tell.
It is a Tomcat application, plus there is SOLR server running (under the same tomcat).
JVM params in
-Xms1024m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/logs
java.lang.OutOfMemoryError: PermGen space Dumping heap to /path/to/logs/java_pid22335.hprof ... Heap dump file created [107041478 bytes in 1.823 secs] Exception in thread "pool-5-thread-1" java.lang.OutOfMemoryError: PermGen space
Now the first strange thing is that memory dump is only 100Mb, while heap limit is 2048Mb. When I used to have "proper" out of memory errors, dump file was close in size to the heap limit.
Second strange thing is memory usage shown by
jmap -heap 22335 seems pretty normal (when this command was run the java app was still down):
Attaching to process ID 22335, please wait... Debugger attached successfully. Server compiler detected. JVM version is 11.3-b02 using thread-local object allocation. Parallel GC with 16 thread(s) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 2147483648 (2048.0MB) NewSize = 2686976 (2.5625MB) MaxNewSize = -65536 (-0.0625MB) OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 88080384 (84.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 566689792 (540.4375MB) used = 13467648 (12.84375MB) free = 553222144 (527.59375MB) 2.3765467792297907% used From Space: capacity = 327680 (0.3125MB) used = 0 (0.0MB) free = 327680 (0.3125MB) 0.0% used To Space: capacity = 327680 (0.3125MB) used = 0 (0.0MB) free = 327680 (0.3125MB) 0.0% used PS Old Generation capacity = 1431699456 (1365.375MB) used = 86216248 (82.22222137451172MB) free = 1345483208 (1283.1527786254883MB) 6.021951579200712% used PS Perm Generation capacity = 88080384 (84.0MB) used = 88080080 (83.99971008300781MB) free = 304 (2.899169921875E-4MB) 99.99965486072358% used
I looked at the memory dump file, nothing unusual there. Tried increasing heap limit, no difference.
Any ideas what could it be and why the dump file is so small, so is the memory usage while the app continues throwing out of memory errors?