NMT does not seem to count malloc correctly
Thomas Stüfe
thomas.stuefe at gmail.com
Thu Aug 6 15:28:50 UTC 2020
Hi,
maybe I am missing something fundamental, or there is something wrong with
NMT.
As an experiment for an unrelated issue, I created a C-Heap leak by simply
commenting out the ::free() call inside os::free():
--- a/src/hotspot/share/runtime/os.cpp Thu Aug 06 17:08:02 2020 +0200
+++ b/src/hotspot/share/runtime/os.cpp Thu Aug 06 17:08:08 2020 +0200
@@ -804,7 +804,7 @@
size_t size = guarded.get_user_size();
inc_stat_counter(&free_bytes, size);
membase = guarded.release_for_freeing();
- ::free(membase);
+// ::free(membase);
#else
void* membase = MemTracker::record_free(memblock,
MemTracker::tracking_level());
::free(membase);
As expected, this leads quickly to a very high memory usage. In my tiny
example (which really does not matter) I quickly end up with ~4G RSS, and
the glibc reports about 3G outstanding allocations:
Process Memory:
Virtual Size: 11136852K (peak: 11136852K)
Resident Set Size: 4057860K (peak: 4057860K) (anon: 4013076K, file: 44784K,
shmem: 0K)
Swapped out: 0K
C-Heap outstanding allocations: 3070399K
However, NMT reports just about 600M committed memory (into this number
should fall all outstanding allocations done with os::malloc() AFAICS):
thomas at mainframe:~$ jjjcmd Interl VM.native_memory scale=1
19441:
Native Memory Tracking:
Total: reserved=6227876720, committed=626285424
....
And the malloc information adds up to about only 68M:
thomas at mainframe:~$ jjjcmd Interl VM.native_memory scale=1 | grep malloc
(malloc=4044913 #55107)
(malloc=38688 #146)
(malloc=10812522 #258557)
(malloc=18157899 #3629)
(malloc=42496 #311)
(malloc=216 #7)
(malloc=594920 #1788)
(malloc=27304 #2)
(malloc=2781872 #60716)
(malloc=543008 #5144)
(malloc=200416)
(malloc=152 #7)
(malloc=6788 #214)
(malloc=18977 #485)
(malloc=994280 #2797)
(malloc=153248 #744)
(malloc=2152 #12)
I must be missing something obvious here. What is it?
Thank you,
Thomas
More information about the hotspot-runtime-dev
mailing list