【TDengine 使用环境】
生产环境 /测试
【TDengine 版本】
3.3.8.8
【操作系统以及版本】
Rocky Linux release 8.9
【部署方式】容器/非容器部署
容器部署
【遇到的问题:问题现象及影响】
我的C++服务在生产环境加载了libtaos.so.3.3.8.8和libtaosws.so.3.3.8.8操作数据库,发现查询数据库会占用大量内存且无法释放。于是,我在测试环境使用安装包下example/c-ws-new/query_data_demo程序进行测试发现,该程序在运行周期内,释放数据库资源后仍然会占用大概5M的内存。使用valgrind进行查询发现可能有内存泄漏的情况出现(见下方部分日志)。请教各位大神,如何在查询数据后将内存释放掉?
==5353== Memcheck, a memory error detector
==5353== Copyright (C) 2002-2022, and GNU GPL’d, by Julian Seward et al.
==5353== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==5353== Command: ./query_data_demo
==5353== Parent PID: 5243
==5353==
==5353==
==5353== HEAP SUMMARY:
==5353== in use at exit: 2,040,923 bytes in 1,219 blocks
==5353== total heap usage: 13,027 allocs, 11,808 frees, 6,833,868 bytes allocated
==5353==
==5353== 96 bytes in 1 blocks are definitely lost in loss record 168 of 404
==5353== at 0x4C39185: malloc (vg_replace_malloc.c:442)
==5353== by 0x53FED84: __libc_alloc_buffer_allocate (in /usr/lib64/libc-2.28.so)
==5353== by 0x54BF949: __resolv_conf_allocate (in /usr/lib64/libc-2.28.so)
==5353== by 0x54BD517: __resolv_conf_load (in /usr/lib64/libc-2.28.so)
==5353== by 0x54BF6CE: __resolv_conf_get_current (in /usr/lib64/libc-2.28.so)
==5353== by 0x54BDFA4: __res_vinit (in /usr/lib64/libc-2.28.so)
==5353== by 0x54BEF2A: context_get.part.1 (in /usr/lib64/libc-2.28.so)
==5353== by 0x5486800: gaih_inet.constprop.6 (in /usr/lib64/libc-2.28.so)
==5353== by 0x5487ECA: getaddrinfo (in /usr/lib64/libc-2.28.so)
==5353== by 0x6D3D682: <std::sys::net::connection::socket::LookupHost as core::convert::TryFrom<(&str,u16)>>::try_from::{{closure}} (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x71C440F: tokio::runtime::task::raw::poll (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x71C5C68: std::sys::backtrace::__rust_begin_short_backtrace (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353==
==5353== 116 bytes in 1 blocks are possibly lost in loss record 172 of 404
==5353== at 0x4C39185: malloc (vg_replace_malloc.c:442)
==5353== by 0x6C30624: hashbrown::raw::RawTable<T,A>::reserve_rehash (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BF29BC: regex_automata::nfa::thompson::compiler::Compiler::compile (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C02A5A: regex_automata::meta::strategy::new (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C47210: regex_automata::meta::regex::Builder::build (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BBEC7B: regex::regex::string::Regex::new (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D5688A: std::sync::poison::once::Once::call_once_force::{{closure}} (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D357B6: std::sys::sync::once::futex::Once::call (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D567B1: std::sync::once_lock::OnceLock::initialize (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D45C1F: core::ops::function::impls::<impl core::ops::function::FnMut for &mut F>::call_mut (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D53DF8: std::sys::backtrace::__rust_begin_short_backtrace (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D4B879: core::ops::function::FnOnce::call_once{{vtable.shim}} (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)。。。省略部分日志。。。
==5353==
==5353== 416 bytes in 1 blocks are possibly lost in loss record 281 of 404
==5353== at 0x4C39185: malloc (vg_replace_malloc.c:442)
==5353== by 0x6C30EF4: hashbrown::raw::RawTable<T,A>::reserve_rehash (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C30D7D: hashbrown::HashMap<K,V,S,A>::insert (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BFEC5D: regex_automata::hybrid::dfa::Lazy::cache_next_state (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BDD8AA: regex_automata::hybrid::search::find_fwd (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C20D7D: regex_automata::hybrid::regex::Regex::try_search (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C23EF5: <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B96F4A: <core::iter::adapters::GenericShunt<I,R> as core::iter::traits::iterator::Iterator>::next (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B939CD: mdsn::Dsn::from_regex::parse_addr (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B91AEE: mdsn::Dsn::from_regex::try_parse_url (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B90A45: mdsn::Dsn::from_regex (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B23B89: taos_connect (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353==
==5353== 816 bytes in 1 blocks are possibly lost in loss record 319 of 404
==5353== at 0x4C39185: malloc (vg_replace_malloc.c:442)
==5353== by 0x6C30EF4: hashbrown::raw::RawTable<T,A>::reserve_rehash (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C30D7D: hashbrown::HashMap<K,V,S,A>::insert (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BFEC5D: regex_automata::hybrid::dfa::Lazy::cache_next_state (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6BDF31A: regex_automata::hybrid::search::find_fwd (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6C23B49: <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_half (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D4565C: core::ops::function::impls::<impl core::ops::function::FnMut for &mut F>::call_mut (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D53DF8: std::sys::backtrace::__rust_begin_short_backtrace (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D4B879: core::ops::function::FnOnce::call_once{{vtable.shim}} (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D3F450: std::sys::pal::unix::thread_start (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x51481C9: start_thread (in /usr/lib64/libpthread-2.28.so)
==5353== by 0x53998D2: clone (in /usr/lib64/libc-2.28.so)
==5353==
==5353== 1,280 bytes in 4 blocks are possibly lost in loss record 327 of 404
==5353== at 0x4C40963: calloc (vg_replace_malloc.c:1595)
==5353== by 0x40154B2: UnknownInlinedFun (rtld-malloc.h:44)
==5353== by 0x40154B2: allocate_dtv (dl-tls.c:397)
==5353== by 0x4015F71: _dl_allocate_tls (dl-tls.c:681)
==5353== by 0x5148E22: pthread_create@@GLIBC_2.2.5 (in /usr/lib64/libpthread-2.28.so)
==5353== by 0x6D3F11A: std::sys::pal::unix::new (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x71C89D6: tokio::runtime::blocking::pool::Spawner::spawn_task (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D604A7: std::sync::poison::once::Once::call_once::{{closure}} (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6D357B6: std::sys::sync::once::futex::Once::call (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6FA0F19: <taos_ws::TaosBuilder as taos_query::TBuilder>::build (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x6B24290: taos_connect (in /usr/local/taos/driver/libtaosws.so.3.3.8.8)
==5353== by 0x400A29: DemoQueryData (query_data_demo.c:24)
==5353== by 0x400BC5: main (query_data_demo.c:77)
==5353==
==5353== LEAK SUMMARY:
==5353== definitely lost: 96 bytes in 1 blocks
==5353== indirectly lost: 0 bytes in 0 blocks
==5353== possibly lost: 6,868 bytes in 30 blocks
==5353== still reachable: 2,033,959 bytes in 1,188 blocks
==5353== suppressed: 0 bytes in 0 blocks
==5353== Reachable blocks (those to which a pointer was found) are not shown.
==5353== To see them, rerun with: --leak-check=full --show-leak-kinds=all