8036701: Add trace event when a metaspace throws out of memory error
Reviewed-by: stefank, mgerdin
This commit is contained in:
parent
b533eca89d
commit
0a79ba6680
@ -3371,7 +3371,7 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
report_metadata_oome(loader_data, word_size, mdtype, CHECK_NULL);
|
report_metadata_oome(loader_data, word_size, type, mdtype, CHECK_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zero initialize.
|
// Zero initialize.
|
||||||
@ -3385,7 +3385,9 @@ size_t Metaspace::class_chunk_size(size_t word_size) {
|
|||||||
return class_vsm()->calc_chunk_size(word_size);
|
return class_vsm()->calc_chunk_size(word_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Metaspace::report_metadata_oome(ClassLoaderData* loader_data, size_t word_size, MetadataType mdtype, TRAPS) {
|
void Metaspace::report_metadata_oome(ClassLoaderData* loader_data, size_t word_size, MetaspaceObj::Type type, MetadataType mdtype, TRAPS) {
|
||||||
|
tracer()->report_metadata_oom(loader_data, word_size, type, mdtype);
|
||||||
|
|
||||||
// If result is still null, we are out of memory.
|
// If result is still null, we are out of memory.
|
||||||
if (Verbose && TraceMetadataChunkAllocation) {
|
if (Verbose && TraceMetadataChunkAllocation) {
|
||||||
gclog_or_tty->print_cr("Metaspace allocation failed for size "
|
gclog_or_tty->print_cr("Metaspace allocation failed for size "
|
||||||
|
@ -239,7 +239,7 @@ class Metaspace : public CHeapObj<mtClass> {
|
|||||||
static void purge();
|
static void purge();
|
||||||
|
|
||||||
static void report_metadata_oome(ClassLoaderData* loader_data, size_t word_size,
|
static void report_metadata_oome(ClassLoaderData* loader_data, size_t word_size,
|
||||||
MetadataType mdtype, TRAPS);
|
MetaspaceObj::Type type, MetadataType mdtype, TRAPS);
|
||||||
|
|
||||||
static const char* metadata_type_name(Metaspace::MetadataType mdtype);
|
static const char* metadata_type_name(Metaspace::MetadataType mdtype);
|
||||||
|
|
||||||
|
@ -44,7 +44,22 @@ void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
|
|||||||
size_t word_size,
|
size_t word_size,
|
||||||
MetaspaceObj::Type objtype,
|
MetaspaceObj::Type objtype,
|
||||||
Metaspace::MetadataType mdtype) const {
|
Metaspace::MetadataType mdtype) const {
|
||||||
EventMetaspaceAllocationFailure event;
|
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
|
||||||
|
size_t word_size,
|
||||||
|
MetaspaceObj::Type objtype,
|
||||||
|
Metaspace::MetadataType mdtype) const {
|
||||||
|
send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename E>
|
||||||
|
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
|
||||||
|
size_t word_size,
|
||||||
|
MetaspaceObj::Type objtype,
|
||||||
|
Metaspace::MetadataType mdtype) const {
|
||||||
|
E event;
|
||||||
if (event.should_commit()) {
|
if (event.should_commit()) {
|
||||||
if (cld->is_anonymous()) {
|
if (cld->is_anonymous()) {
|
||||||
event.set_classLoader(NULL);
|
event.set_classLoader(NULL);
|
||||||
|
@ -32,6 +32,11 @@
|
|||||||
class ClassLoaderData;
|
class ClassLoaderData;
|
||||||
|
|
||||||
class MetaspaceTracer : public CHeapObj<mtTracing> {
|
class MetaspaceTracer : public CHeapObj<mtTracing> {
|
||||||
|
template <typename E>
|
||||||
|
void send_allocation_failure_event(ClassLoaderData *cld,
|
||||||
|
size_t word_size,
|
||||||
|
MetaspaceObj::Type objtype,
|
||||||
|
Metaspace::MetadataType mdtype) const;
|
||||||
public:
|
public:
|
||||||
void report_gc_threshold(size_t old_val,
|
void report_gc_threshold(size_t old_val,
|
||||||
size_t new_val,
|
size_t new_val,
|
||||||
@ -40,6 +45,11 @@ class MetaspaceTracer : public CHeapObj<mtTracing> {
|
|||||||
size_t word_size,
|
size_t word_size,
|
||||||
MetaspaceObj::Type objtype,
|
MetaspaceObj::Type objtype,
|
||||||
Metaspace::MetadataType mdtype) const;
|
Metaspace::MetadataType mdtype) const;
|
||||||
|
void report_metadata_oom(ClassLoaderData *cld,
|
||||||
|
size_t word_size,
|
||||||
|
MetaspaceObj::Type objtype,
|
||||||
|
Metaspace::MetadataType mdtype) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHARE_VM_MEMORY_METASPACE_TRACER_HPP
|
#endif // SHARE_VM_MEMORY_METASPACE_TRACER_HPP
|
||||||
|
@ -213,6 +213,14 @@ Declares a structure type that can be used in other events.
|
|||||||
<value type="METASPACEOBJTYPE" field="metaspaceObjectType" label="Metaspace Object Type" />
|
<value type="METASPACEOBJTYPE" field="metaspaceObjectType" label="Metaspace Object Type" />
|
||||||
</event>
|
</event>
|
||||||
|
|
||||||
|
<event id="MetaspaceOOM" path="vm/gc/metaspace/out_of_memory" label="Metaspace Out of Memory" is_instant="true" has_stacktrace="true">
|
||||||
|
<value type="CLASS" field="classLoader" label="Class Loader" />
|
||||||
|
<value type="BOOLEAN" field="anonymousClassLoader" label="Anonymous Class Loader" />
|
||||||
|
<value type="BYTES64" field="size" label="Size" />
|
||||||
|
<value type="METADATATYPE" field="metadataType" label="Metadata Type" />
|
||||||
|
<value type="METASPACEOBJTYPE" field="metaspaceObjectType" label="Metaspace Object Type" />
|
||||||
|
</event>
|
||||||
|
|
||||||
<event id="PSHeapSummary" path="vm/gc/heap/ps_summary" label="Parallel Scavenge Heap Summary" is_instant="true">
|
<event id="PSHeapSummary" path="vm/gc/heap/ps_summary" label="Parallel Scavenge Heap Summary" is_instant="true">
|
||||||
<value type="UINT" field="gcId" label="GC ID" relation="GC_ID"/>
|
<value type="UINT" field="gcId" label="GC ID" relation="GC_ID"/>
|
||||||
<value type="GCWHEN" field="when" label="When" />
|
<value type="GCWHEN" field="when" label="When" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user