G1 trace humongous allocations
Wolfgang Pedot
wolfgang.pedot at finkzeit.at
Wed Dec 18 08:51:59 PST 2013
Hi,
is there a way to trace humongous allocations when using G1? I have a
productive application (7u45, ~16GB Heap-Size) and every now and again
there are humongous allocations ranging from ~6-60MB. I know this from
the output of -XX:+G1PrintRegionLivenessInfo. For example:
### HUMS 0x000000073a000000-0x000000073a800000 8388608 8388608
0 3424136.5
### HUMC 0x000000073a800000-0x000000073b000000 8388608 8388608
0 637263.3
### HUMC 0x000000073b000000-0x000000073b800000 8388608 8388608
0 276982.8
### HUMC 0x000000073b800000-0x000000073c000000 8388608 8388608
0 10190518.0
### HUMC 0x000000073c000000-0x000000073c800000 8388608 8388608
0 20046222.4
### HUMC 0x000000073c800000-0x000000073d000000 6580624 6580624
0 1077287.7
This is taken from the Post-Marking Phase output of the GC-Log, usually
a similar block repeats a couple of times indicating that either
something big has been copied or its a repeated request. On a normal day
there are one or two region-dumps containing HUMS/HUMC entries so they
are fairly rare and judging from the logs they are all rather
short-lived. I can pinpoint the allocations to a timewindow of 30-90min
but so far have been unsuccessful to find something specific in the logs
and there are hundrets of sessions on several different interfaces that
could cause this. Its not really an issue but I dont see why my code
should produce objects/arrays this large so I would like to know what
code or at least thread did as it could also be a library.
I cant go ahead and dump the heap every half hour in the hope to catch
such an object while its alive, is there a way G1 could log which thread
allocated the object or a stacktrace?
kind regards
Wolfgang Pedot
More information about the hotspot-gc-use
mailing list