tcmalloc ReleaseToCentralCache 上的段错误

segfault on tcmalloc ReleaseToCentralCache

当流量非常高时,我们经常遇到段错误转储。不确定这里现在有什么问题?

谁有经验可以和我们分享一下?

(gdb) bt

#0 ... in tcmalloc::ThreadCache::ReleaseToCentralCache(tcmalloc::ThreadCache::FreeList*, unsigned long, int) () from /usr/lib64/libtcmalloc.so
#1 ... in tcmalloc::ThreadCache::ListTooLong(tcmalloc::ThreadCache::FreeList*, unsigned  long) () from /usr/lib64/libtcmalloc.so
#2 ... in tc_delete () from /usr/lib64/libtcmalloc.so
#3 ... in boost::detail::sp_counted_impl_p<OutputObject>::dispose() () at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/unique_ptr.h:67

谢谢,

您的程序很可能存在内存损坏。例如,双重免费。您是说当负载高时会出现段错误,因此很可能是竞争条件。

当我们并发使用线程不安全对象(通过单例模式)时遇到了这个问题,因此遇到了各种内存威胁问题。 您可能会通过在堆栈跟踪中查找并检查每个帧中是否存在此类错误来找出问题出在哪里。它对我有用 - 段错误是由 std::string 析构函数引起的,其中 std::string 是线程不安全对象结构的一部分。