1

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

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

(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

谢谢,

4

1 回答 1

3

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

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

于 2015-12-24T10:19:31.550 回答