diff --git a/deps/oblib/src/lib/alloc/malloc_hook.cpp b/deps/oblib/src/lib/alloc/malloc_hook.cpp index 47323d407f..6d295f6676 100644 --- a/deps/oblib/src/lib/alloc/malloc_hook.cpp +++ b/deps/oblib/src/lib/alloc/malloc_hook.cpp @@ -61,6 +61,7 @@ void *ob_malloc_retry(size_t size) do { ObMemAttr attr = ObMallocHookAttrGuard::get_tl_mem_attr(); SET_USE_500(attr); + attr.ctx_id_ = ObCtxIds::GLIBC; ptr = ob_malloc(size, attr); if (OB_ISNULL(ptr)) { attr.tenant_id_ = OB_SERVER_TENANT_ID; diff --git a/deps/oblib/src/lib/alloc/ob_malloc_allocator.cpp b/deps/oblib/src/lib/alloc/ob_malloc_allocator.cpp index 078d7eceef..fd2f959864 100644 --- a/deps/oblib/src/lib/alloc/ob_malloc_allocator.cpp +++ b/deps/oblib/src/lib/alloc/ob_malloc_allocator.cpp @@ -739,9 +739,17 @@ int ObMallocAllocator::recycle_tenant_allocator(uint64_t tenant_id) char first_label[AOBJECT_LABEL_SIZE + 1] = {'\0'}; bool has_unfree = ctx_allocator->check_has_unfree(first_label); if (has_unfree) { - LOG_ERROR("tenant memory leak!!!", K(tenant_id), K(ctx_id), - "ctx_name", get_global_ctx_info().get_ctx_name(ctx_id), - "label", first_label); + if (ObCtxIds::GLIBC == ctx_id + && 0 == strncmp("Pl", first_label, 2) + && pl_leaked_times_++ < 10) { + LOG_WARN("tenant memory leak!!!", K(tenant_id), K(ctx_id), + "ctx_name", get_global_ctx_info().get_ctx_name(ctx_id), + "label", first_label); + } else { + LOG_ERROR("tenant memory leak!!!", K(tenant_id), K(ctx_id), + "ctx_name", get_global_ctx_info().get_ctx_name(ctx_id), + "label", first_label); + } tas[ctx_id] = ctx_allocator; } } diff --git a/deps/oblib/src/lib/alloc/ob_malloc_allocator.h b/deps/oblib/src/lib/alloc/ob_malloc_allocator.h index b0d87f9968..f1ee349502 100644 --- a/deps/oblib/src/lib/alloc/ob_malloc_allocator.h +++ b/deps/oblib/src/lib/alloc/ob_malloc_allocator.h @@ -160,6 +160,7 @@ public: #endif public: bool force_explict_500_malloc_ = false; + bool pl_leaked_times_ = 0; private: DISALLOW_COPY_AND_ASSIGN(ObMallocAllocator); class BucketLock