diff --git a/be/src/runtime/exec_env_init.cpp b/be/src/runtime/exec_env_init.cpp index ecab6838313535..7a0db092f90e49 100644 --- a/be/src/runtime/exec_env_init.cpp +++ b/be/src/runtime/exec_env_init.cpp @@ -421,6 +421,10 @@ void ExecEnv::_destroy() { _join_node_thread_pool.reset(nullptr); _serial_download_cache_thread_token.reset(nullptr); _download_cache_thread_pool.reset(nullptr); + _orphan_mem_tracker.reset(); + _experimental_mem_tracker.reset(); + _page_no_cache_mem_tracker.reset(); + _brpc_iobuf_block_memory_tracker.reset(); _is_init = false; } diff --git a/be/src/runtime/memory/mem_tracker.cpp b/be/src/runtime/memory/mem_tracker.cpp index bf3902821dbe1c..7ec943090d0441 100644 --- a/be/src/runtime/memory/mem_tracker.cpp +++ b/be/src/runtime/memory/mem_tracker.cpp @@ -24,6 +24,7 @@ #include +#include "common/daemon.h" #include "runtime/memory/mem_tracker_limiter.h" #include "runtime/thread_context.h" @@ -81,7 +82,7 @@ void MemTracker::bind_parent(MemTrackerLimiter* parent) { } MemTracker::~MemTracker() { - if (_parent_group_num != -1) { + if (_parent_group_num != -1 && !k_doris_exit) { std::lock_guard l(mem_tracker_pool[_parent_group_num].group_lock); if (_tracker_group_it != mem_tracker_pool[_parent_group_num].trackers.end()) { mem_tracker_pool[_parent_group_num].trackers.erase(_tracker_group_it); diff --git a/be/src/runtime/memory/mem_tracker_limiter.cpp b/be/src/runtime/memory/mem_tracker_limiter.cpp index ded5b0c0b8f9ac..d03bd1ac005f12 100644 --- a/be/src/runtime/memory/mem_tracker_limiter.cpp +++ b/be/src/runtime/memory/mem_tracker_limiter.cpp @@ -26,6 +26,7 @@ #include #include +#include "common/daemon.h" #include "runtime/exec_env.h" #include "runtime/fragment_mgr.h" #include "runtime/load_channel_mgr.h" @@ -79,7 +80,7 @@ MemTrackerLimiter::~MemTrackerLimiter() { // in real time. Merge its consumption into orphan when parent is process, to avoid repetition. ExecEnv::GetInstance()->orphan_mem_tracker()->consume(_consumption->current_value()); _consumption->set(0); - { + if (!k_doris_exit) { std::lock_guard l(mem_tracker_limiter_pool[_group_num].group_lock); if (_tracker_limiter_group_it != mem_tracker_limiter_pool[_group_num].trackers.end()) { mem_tracker_limiter_pool[_group_num].trackers.erase(_tracker_limiter_group_it); diff --git a/be/src/vec/exprs/vexpr_context.cpp b/be/src/vec/exprs/vexpr_context.cpp index 5a309a0d4941a3..236dfc404531ff 100644 --- a/be/src/vec/exprs/vexpr_context.cpp +++ b/be/src/vec/exprs/vexpr_context.cpp @@ -21,8 +21,6 @@ #include #include -#include "common/daemon.h" - // IWYU pragma: no_include #include "common/compiler_util.h" // IWYU pragma: keep #include "common/object_pool.h"