V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
xiaoxiaoyang
V2EX  ›  Linux

在 centos 2 上运行的程序运行一段时间后就卡死了,感觉像是死锁问题,大家有木有好的排查死锁的工具,借鉴一下

  •  
  •   xiaoxiaoyang · 2015-12-22 20:16:39 +08:00 · 3968 次点击
    这是一个创建于 3240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到一个问题是,在 centos 2 上运行的程序运行一段时间后就卡死了,用 gdb 调试查看线程的的时候线程都停在 pthead_cond_wait 这个地方,不知道哪里出问题,猜想是程序出了死锁,大家有木有好的排查死锁的工具,借鉴一下
    17 条回复    2015-12-23 13:02:09 +08:00
    xiaoxiaoyang
        1
    xiaoxiaoyang  
    OP
       2015-12-22 20:24:11 +08:00
    Thread 0x2ba80b594230 (LWP 32218) 0x000000363f80aee9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
    gdb 打印的上面一句话,是在等待什么呢?
    oott123
        2
    oott123  
       2015-12-22 22:37:59 +08:00 via Android
    CentOS 2 …
    这…似乎有点古老…
    ncisoft
        3
    ncisoft  
       2015-12-22 23:41:28 +08:00 via Android
    加调试信息,查出行号,查源代码
    9hills
        4
    9hills  
       2015-12-22 23:57:37 +08:00 via iPad   ❤️ 1
    CentOS2 !
    The first CentOS release in May 2004, numbered as CentOS version 2, was forked from RHEL version 2.1AS.


    这是有多老
    chinvo
        5
    chinvo  
       2015-12-23 00:53:00 +08:00
    你可以尝试升级你的系统
    pynix
        6
    pynix  
       2015-12-23 01:36:36 +08:00
    古董机系统
    comicfans44
        7
    comicfans44  
       2015-12-23 07:54:56 +08:00
    crazycen
        8
    crazycen  
       2015-12-23 08:41:08 +08:00 via iPhone
    当时我还在上初中!
    weiceshi
        9
    weiceshi  
       2015-12-23 09:14:11 +08:00
    @9hills
    The first Windows XP release in Aug 24, 2004
    weiceshi
        10
    weiceshi  
       2015-12-23 09:14:49 +08:00
    @9hills 上面笔误
    The first Windows XP release in Aug 24, 2001
    honeycomb
        11
    honeycomb  
       2015-12-23 09:25:09 +08:00
    @weiceshi 但是人们一般在用 SP2(Aug 24, 2004)/SP3(2008)
    xiaoxiaoyang
        12
    xiaoxiaoyang  
    OP
       2015-12-23 09:53:53 +08:00
    @comicfans44 在用 valgrind 但另一个 liblockdep ????大多数的线程都在
    0x000000320a00b63c in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
    这是在等待信号吗?
    xiaoxiaoyang
        13
    xiaoxiaoyang  
    OP
       2015-12-23 09:58:02 +08:00
    @9hills 不好意思,抱歉我写错了,现在系统是 centos6.5-64 ,依然很感谢
    comicfans44
        14
    comicfans44  
       2015-12-23 10:38:02 +08:00
    @xiaoxiaoyang 等待被其他线程的 pthread_cond_broadcast/pthread_cond_signal 唤醒。从你描述的情况来看,应该是条件变量等待导致的死锁,你需要的是回溯这些 pthread_cond_wait 的调用栈,找到调用点前的判定的条件都是什么。应该是这些判定条件彼此有循环依赖关系
    xiaoxiaoyang
        15
    xiaoxiaoyang  
    OP
       2015-12-23 11:06:49 +08:00
    @comicfans44 非常感谢,我看下代码
    CheungKe
        16
    CheungKe  
       2015-12-23 11:09:34 +08:00
    @xiaoxiaoyang 不是 CentOS 6.4 x86_64?
    xiaoxiaoyang
        17
    xiaoxiaoyang  
    OP
       2015-12-23 13:02:09 +08:00
    @CheungKe 虚拟机显示是 CentOS 6.5 x86_64
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1208 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:10 · PVG 02:10 · LAX 10:10 · JFK 13:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.