- 论坛徽章:
- 0
|
今天早上,收到n多警报邮件。一个程序发生了死锁。几个线程都有竞争一个锁,打印锁变量,该锁被一个线程占用,而占用该锁的线程,在delete内存的时候阻塞了,后面再也没有被唤起。
Thread 22 (Thread 0x7f5df2086700 (LWP 7032)):
#0 0x00000030d38f4e6e in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x00000030d387b914 in _L_lock_5003 () from /lib64/libc.so.6
#2 0x00000030d3877762 in _int_free () from /lib64/libc.so.6
#3 0x0000000000477d91 in __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData> > >::deallocate(std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData> >*, unsigned long) ()
#4 0x0000000000477db9 in std::_Rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData>, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData> > >::_M_put_node(std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ThreadSafeHashMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FpeerImp, my_null_delete<FpeerImp> >::stNodeData> >*) ()
pstack看了一下,另外一个线程比较可疑:
Thread 17 (Thread 0x7f5df097a700 (LWP 7037)):
#0 0x00000030d38f4e6e in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x00000030d387bae8 in _L_lock_9164 () from /lib64/libc.so.6
#2 0x00000030d3879482 in malloc () from /lib64/libc.so.6
#3 0x00000030d300cb7b in _dl_map_object_deps () from /lib64/ld-linux-x86-64.so.2
#4 0x00000030d3012991 in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
#5 0x00000030d300e106 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#6 0x00000030d30123ea in _dl_open () from /lib64/ld-linux-x86-64.so.2
#7 0x00000030d3922f80 in do_dlopen () from /lib64/libc.so.6
#8 0x00000030d300e106 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#9 0x00000030d39230d7 in __libc_dlopen_mode () from /lib64/libc.so.6
#10 0x00000030d38fb675 in init () from /lib64/libc.so.6
#11 0x00000030d400cac3 in pthread_once () from /lib64/libpthread.so.0
#12 0x00000030d38fb774 in backtrace () from /lib64/libc.so.6
#13 0x00000030d386f7bb in __libc_message () from /lib64/libc.so.6
#14 0x00000030d38750c6 in malloc_printerr () from /lib64/libc.so.6
#15 0x00000030d3878b0c in _int_malloc () from /lib64/libc.so.6
#16 0x00000030d387948d in malloc () from /lib64/libc.so.6
#17 0x00000030dfcbd0bd in operator new(unsigned long) () from /usr/lib64/libstdc++.so.6
#18 0x000000000046fee9 in google::protobuf::internal::GenericTypeHandler<msg::ResItem>::New() ()
#19 0x000000000046ffb4 in google::protobuf::RepeatedPtrField<msg::ResItem>::TypeHandler::Type* google::protobuf::internal::RepeatedPtrFieldBase::Add<google::protobuf::RepeatedPtrField<msg::ResItem>::TypeHandler>() ()
#20 0x0000000000470093 in google::protobuf::RepeatedPtrField<msg::ResItem>::Add() ()
#21 0x00000000004700af in msg::ReportResourceReq::add_resource() ()
#22 0x00000000004634b3 in msg::ReportResourceReq::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*) ()
#23 0x00000000004eafb8 in google::protobuf::MessageLite: arseFromString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& ()
#24 0x000000000044bc7c in TaskProcessThreads::doIt() ()
#25 0x0000000000422838 in SDThreadPool::threadProc(void*) ()
#26 0x00000030d40077f1 in start_thread () from /lib64/libpthread.so.0
#27 0x00000030d38e570d in clone () from /lib64/libc.so.6
这个线程为啥会阻塞呢,现在忘记了看当时new的size的大小了。已经重启了,没找到原因为啥死锁。 |
|