< prev index next >
src/hotspot/share/memory/metaspace/metaspaceDCmd.cpp
Print this page
rev 49870 : 8201572: Improve Metaspace reporting
Reviewed-by:
*** 21,36 ****
* questions.
*
*/
#include "precompiled.hpp"
#include "memory/metaspace.hpp"
#include "services/diagnosticCommand.hpp"
! MetaspaceDCmd::MetaspaceDCmd(outputStream* output, bool heap): DCmd(output, heap) {
}
void MetaspaceDCmd::execute(DCmdSource source, TRAPS) {
! const size_t scale = 1 * K;
! VM_PrintMetadata op(output(), scale);
VMThread::execute(&op);
}
--- 21,100 ----
* questions.
*
*/
#include "precompiled.hpp"
#include "memory/metaspace.hpp"
+ #include "memory/metaspace/metaspaceDCmd.hpp"
+ #include "memory/resourceArea.hpp"
#include "services/diagnosticCommand.hpp"
+ #include "services/nmtCommon.hpp"
! namespace metaspace {
!
! MetaspaceDCmd::MetaspaceDCmd(outputStream* output, bool heap)
! : DCmdWithParser(output, heap)
! , _basic("basic", "Prints a basic summary (does not need a safepoint).", "BOOLEAN", false, "false")
! , _show_loaders("show-loaders", "Shows usage by class loader.", "BOOLEAN", false, "false")
! , _by_chunktype("by-chunktype", "Break down numbers by chunk type.", "BOOLEAN", false, "false")
! , _by_spacetype("by-spacetype", "Break down numbers by loader type.", "BOOLEAN", false, "false")
! , _show_vslist("vslist", "Shows details about the underlying virtual space.", "BOOLEAN", false, "false")
! , _show_vsmap("vsmap", "Shows chunk composition of the underlying virtual spaces", "BOOLEAN", false, "false")
! , _scale("scale", "Memory usage in which to scale. Valid values are: 1, KB, MB or GB (fixed scale) "
! "or \"dynamic\" for a dynamically choosen scale.",
! "STRING", false, "dynamic")
! {
! _dcmdparser.add_dcmd_option(&_basic);
! _dcmdparser.add_dcmd_option(&_show_loaders);
! _dcmdparser.add_dcmd_option(&_by_chunktype);
! _dcmdparser.add_dcmd_option(&_by_spacetype);
! _dcmdparser.add_dcmd_option(&_show_vslist);
! _dcmdparser.add_dcmd_option(&_show_vsmap);
! _dcmdparser.add_dcmd_option(&_scale);
! }
!
! int MetaspaceDCmd::num_arguments() {
! ResourceMark rm;
! MetaspaceDCmd* dcmd = new MetaspaceDCmd(NULL, false);
! if (dcmd != NULL) {
! DCmdMark mark(dcmd);
! return dcmd->_dcmdparser.num_arguments();
! } else {
! return 0;
! }
}
void MetaspaceDCmd::execute(DCmdSource source, TRAPS) {
! // Parse scale value.
! const char* scale_value = _scale.value();
! size_t scale = 0;
! if (scale_value != NULL) {
! if (strcasecmp("dynamic", scale_value) == 0) {
! scale = 0;
! } else {
! scale = NMTUtil::scale_from_name(scale_value);
! if (scale == 0) {
! output()->print_cr("Invalid scale: \"%s\". Will use dynamic scaling.", scale_value);
! }
! }
! }
! if (_basic.value() == true) {
! if (_show_loaders.value() || _by_chunktype.value() || _by_spacetype.value() ||
! _show_vslist.value() || _show_vsmap.value()) {
! // Basic mode. Just print essentials. Does not need to be at a safepoint.
! output()->print_cr("In basic mode, additional arguments are ignored.");
! }
! MetaspaceUtils::print_basic_report(output(), scale);
! } else {
! // Full mode. Requires safepoint.
! int flags = 0;
! if (_show_loaders.value()) flags |= MetaspaceUtils::rf_show_loaders;
! if (_by_chunktype.value()) flags |= MetaspaceUtils::rf_break_down_by_chunktype;
! if (_by_spacetype.value()) flags |= MetaspaceUtils::rf_break_down_by_spacetype;
! if (_show_vslist.value()) flags |= MetaspaceUtils::rf_show_vslist;
! if (_show_vsmap.value()) flags |= MetaspaceUtils::rf_show_vsmap;
! VM_PrintMetadata op(output(), scale, flags);
VMThread::execute(&op);
+ }
}
+ } // namespace metaspace
+
< prev index next >