diff --git a/src/arguments.cpp b/src/arguments.cpp index 336182eba..a9fb58833 100644 --- a/src/arguments.cpp +++ b/src/arguments.cpp @@ -364,6 +364,9 @@ Error Arguments::parse(const char* args) { CASE("reverse") _reverse = true; + CASE("meminfolog") + _log_meminfo_on_dump = true; + DEFAULT() if (_unknown_arg == NULL) _unknown_arg = arg; } diff --git a/src/arguments.h b/src/arguments.h index 763017679..1bf82bade 100644 --- a/src/arguments.h +++ b/src/arguments.h @@ -184,6 +184,8 @@ class Arguments { const char* _title; double _minwidth; bool _reverse; + // Granulate Extra + bool _log_meminfo_on_dump; Arguments(bool persistent = false) : _buf(NULL), @@ -230,7 +232,8 @@ class Arguments { _end(NULL), _title(NULL), _minwidth(0), - _reverse(false) { + _reverse(false), + _log_meminfo_on_dump(false) { } ~Arguments(); diff --git a/src/profiler.cpp b/src/profiler.cpp index bd51f1ef5..ebfe3e961 100644 --- a/src/profiler.cpp +++ b/src/profiler.cpp @@ -1568,6 +1568,10 @@ Error Profiler::runInternal(Arguments& args, std::ostream& out) { } case ACTION_DUMP: { Error error = dump(out, args); + if (args._log_meminfo_on_dump) { + logUsedMemory(); + } + if (error) { return error; } @@ -1685,3 +1689,9 @@ void Profiler::shutdown(Arguments& args) { _state = TERMINATED; } + +void Profiler::logUsedMemory() { + std::ostringstream stringStream; + printUsedMemory(stringStream); + Log::info("%s", stringStream.str().c_str()); +} diff --git a/src/profiler.h b/src/profiler.h index dc535725d..8e58b2046 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -200,6 +200,7 @@ class Profiler { Error stop(); Error flushJfr(); Error dump(std::ostream& out, Arguments& args); + void logUsedMemory(); void printUsedMemory(std::ostream& out); void switchThreadEvents(jvmtiEventMode mode); int convertNativeTrace(int native_frames, const void** callchain, ASGCT_CallFrame* frames);