From e26d5d0da00bdc63fbf207b8ef47af4068174326 Mon Sep 17 00:00:00 2001 From: HuangWei Date: Sat, 12 Sep 2020 11:18:50 +0800 Subject: [PATCH] [MemTracker] show all MemTrackers on BE's website (#4580) We can show all MemTrackers on BE's website by calling MemTracker::ListTrackers(). --- be/src/http/default_path_handlers.cpp | 44 ++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/be/src/http/default_path_handlers.cpp b/be/src/http/default_path_handlers.cpp index 413ffa9247..0a43bd4b86 100644 --- a/be/src/http/default_path_handlers.cpp +++ b/be/src/http/default_path_handlers.cpp @@ -24,12 +24,18 @@ #include #include "common/configbase.h" +#include "gutil/strings/numbers.h" +#include "gutil/strings/substitute.h" +#include "http/action/tablets_info_action.h" #include "http/web_page_handler.h" #include "runtime/mem_tracker.h" #include "util/debug_util.h" #include "util/pretty_printer.h" #include "util/thread.h" -#include "http/action/tablets_info_action.h" + +using std::vector; +using std::shared_ptr; +using std::string; namespace doris { @@ -113,6 +119,41 @@ void display_tablets_callback(const WebPageHandler::ArgumentMap& args, EasyJson* (*ej) = tablet_info_action.get_tablets_info(tablet_num_to_return); } +// Registered to handle "/mem_tracker", and prints out memory tracker information. +void mem_tracker_handler(const WebPageHandler::ArgumentMap& args, std::stringstream* output) { + (*output) << "

Memory usage by subsystem

\n"; + (*output) << "\n"; + (*output) << "" + "" + "" + "" + "" + ""; + (*output) << "\n"; + + vector> trackers; + MemTracker::ListTrackers(&trackers); + for (const shared_ptr& tracker : trackers) { + string parent = tracker->parent() == nullptr ? "none" : tracker->parent()->label(); + string limit_str = tracker->limit() == -1 ? "none" : + ItoaKMGT(tracker->limit()); + string current_consumption_str = ItoaKMGT(tracker->consumption()); + string peak_consumption_str = ItoaKMGT(tracker->peak_consumption()); + (*output) << strings::Substitute("" // id, parent, limit + "\n", // current, peak + tracker->label(), parent, limit_str, current_consumption_str, + peak_consumption_str); + } + (*output) << "
IdParentLimitCurrent ConsumptionPeak Consumption
$0$1$2$3$4
\n"; +} + void add_default_path_handlers(WebPageHandler* web_page_handler, const std::shared_ptr& process_mem_tracker) { // TODO(yingchun): logs_handler is not implemented yet, so not show it on navigate bar @@ -121,6 +162,7 @@ void add_default_path_handlers(WebPageHandler* web_page_handler, web_page_handler->register_page( "/memz", "Memory", boost::bind(&mem_usage_handler, process_mem_tracker, _1, _2), true /* is_on_nav_bar */); + web_page_handler->register_page("/mem_tracker", "MemTracker", mem_tracker_handler,true /* is_on_nav_bar */); register_thread_display_page(web_page_handler); web_page_handler->register_template_page("/tablets_page", "Tablets", boost::bind(&display_tablets_callback, _1, _2), true /* is_on_nav_bar */); }