From 0cdc0d61953daec4b4bf305281bdc9ccee6cb223 Mon Sep 17 00:00:00 2001 From: ehelin Date: Fri, 21 Mar 2014 10:28:07 +0100 Subject: [PATCH] 8036701: Add trace event when a metaspace throws out of memory error Reviewed-by: stefank, mgerdin --- src/share/vm/memory/metaspace.cpp | 6 ++++-- src/share/vm/memory/metaspace.hpp | 2 +- src/share/vm/memory/metaspaceTracer.cpp | 17 ++++++++++++++++- src/share/vm/memory/metaspaceTracer.hpp | 10 ++++++++++ src/share/vm/trace/trace.xml | 8 ++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/share/vm/memory/metaspace.cpp b/src/share/vm/memory/metaspace.cpp index a84ab9893..50fbef101 100644 --- a/src/share/vm/memory/metaspace.cpp +++ b/src/share/vm/memory/metaspace.cpp @@ -3370,7 +3370,7 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, } 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. @@ -3384,7 +3384,9 @@ size_t Metaspace::class_chunk_size(size_t 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 (Verbose && TraceMetadataChunkAllocation) { gclog_or_tty->print_cr("Metaspace allocation failed for size " diff --git a/src/share/vm/memory/metaspace.hpp b/src/share/vm/memory/metaspace.hpp index 26465706b..3dac1b8fe 100644 --- a/src/share/vm/memory/metaspace.hpp +++ b/src/share/vm/memory/metaspace.hpp @@ -238,7 +238,7 @@ class Metaspace : public CHeapObj { static void purge(); 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); diff --git a/src/share/vm/memory/metaspaceTracer.cpp b/src/share/vm/memory/metaspaceTracer.cpp index 93bfda3a3..bd4960aab 100644 --- a/src/share/vm/memory/metaspaceTracer.cpp +++ b/src/share/vm/memory/metaspaceTracer.cpp @@ -44,7 +44,22 @@ void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld, size_t word_size, MetaspaceObj::Type objtype, Metaspace::MetadataType mdtype) const { - EventMetaspaceAllocationFailure event; + send_allocation_failure_event(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(cld, word_size, objtype, mdtype); +} + +template +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 (cld->is_anonymous()) { event.set_classLoader(NULL); diff --git a/src/share/vm/memory/metaspaceTracer.hpp b/src/share/vm/memory/metaspaceTracer.hpp index 4e5352b3c..4ae0138d5 100644 --- a/src/share/vm/memory/metaspaceTracer.hpp +++ b/src/share/vm/memory/metaspaceTracer.hpp @@ -32,6 +32,11 @@ class ClassLoaderData; class MetaspaceTracer : public CHeapObj { + template + void send_allocation_failure_event(ClassLoaderData *cld, + size_t word_size, + MetaspaceObj::Type objtype, + Metaspace::MetadataType mdtype) const; public: void report_gc_threshold(size_t old_val, size_t new_val, @@ -40,6 +45,11 @@ class MetaspaceTracer : public CHeapObj { size_t word_size, MetaspaceObj::Type objtype, 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 diff --git a/src/share/vm/trace/trace.xml b/src/share/vm/trace/trace.xml index 9f3206e00..21aa3a356 100644 --- a/src/share/vm/trace/trace.xml +++ b/src/share/vm/trace/trace.xml @@ -213,6 +213,14 @@ Declares a structure type that can be used in other events. + + + + + + + + -- GitLab