技术解析

在 centos 2 上运行的程序运行一段时间后就卡死了,感觉像是死锁问题,大家有木有好的排查死锁的工具,借鉴一下
0
2021-07-06 06:01:12
idczone
最近遇到一个问题是,在 centos 2 上运行的程序运行一段时间后就卡死了,用 gdb 调试查看线程的的时候线程都停在 pthead_cond_wait 这个地方,不知道哪里出问题,猜想是程序出了死锁,大家有木有好的排查死锁的工具,借鉴一下
Thread 0x2ba80b594230 (LWP 32218) 0x000000363f80aee9 in [email&() from /lib64/libpthread.so.0
gdb 打印的上面一句话,是在等待什么呢?

CentOS 2 …
这…似乎有点古老…

加调试信息,查出行号,查源代码

CentOS2 !
The first CentOS release in May 2004, numbered as CentOS version 2, was forked from RHEL version 2.1AS.

这是有多老

你可以尝试升级你的系统

古董机系统

valgrind http://valgrind.org/docs/manual/hg-manual.html
或者 liblockdep http://www.vctlabs.com/posts/2014/Jul/09/liblockdep/

当时我还在上初中!


The first Windows XP release in Aug 24, 2004

上面笔误
The first Windows XP release in Aug 24, 2001

但是人们一般在用 SP2(Aug 24, 2004)/SP3(2008)

在用 valgrind 但另一个 liblockdep ????大多数的线程都在
0x000000320a00b63c in [email&() from /lib64/libpthread.so.0
这是在等待信号吗?

不好意思,抱歉我写错了,现在系统是 centos6.5-64 ,依然很感谢

等待被其他线程的 pthread_cond_broadcast/pthread_cond_signal 唤醒。从你描述的情况来看,应该是条件变量等待导致的死锁,你需要的是回溯这些 pthread_cond_wait 的调用栈,找到调用点前的判定的条件都是什么。应该是这些判定条件彼此有循环依赖关系

非常感谢,我看下代码

不是 CentOS 6.4 x86_64?

虚拟机显示是 CentOS 6.5 x86_64

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服