程序死循环问题定位

   日期:2020-07-18     浏览:100    评论:0    
核心提示:死循环Glusterfs如果代码中出现死循环,过段时间后,虚拟机将会被异常挂起(io异常),df命令也会卡主!死循环代码段定位pstack 进程号pstack是通过采集某个时间点,当前进程调用函数的情况,通过多次调用pstack,发现某个函数一直出现,那么,绝大多数情况下,该函数出现(死循环or死锁)。假设func函数出现的概率很高假设就是出现了死锁、死循环,那么这两种情况有所不同。死锁:pstack显示卡死的代码行永远是某一行死循环:pstack显示卡死的代码一直在某个函数范围内,但是行号

死循环

Glusterfs如果代码中出现死循环,过段时间后,虚拟机将会被异常挂起(io异常),df命令也会卡主!

死循环代码段定位

  1. pstack 进程号
    pstack是通过采集某个时间点,当前进程调用函数的情况,通过多次调用pstack,发现某个函数一直出现,那么,绝大多数情况下,该函数出现(死循环or死锁)。假设func函数出现的概率很高
    假设就是出现了死锁、死循环,那么这两种情况有所不同。
    死锁:pstack显示卡死的代码行永远是某一行
    死循环:pstack显示卡死的代码一直在某个函数范围内,但是行号会在函数内有所变化
  2. top命令、死循环/死锁
    如果Glusterfs出现死循环,那么使用top查看cpu使用率时,将发现该进程cpu占用率会很高,达到100
    死锁的情况下,没测过top,后续补充!
  3. gdb调试进程,分析死循环(断点区间:由大变小)
    首先,将断点打到函数(大区间),然后C,发现C过很久也一直卡主,说明程序可能在该函数内的某个代码段死循环了,导致没法重新进来
    然后,将断点打到pstack显示的行号处(小区间),执行C,如果是死循环,C将会立刻退出,多次C,会一直退出(退出说明程序一直经过该行号)
    最后,如果出现上述情况,那绝大多数是死循环了!此时应该用gdb打印各个变量的值,分析代码逻辑,证明的确是死循环。
  4. 死锁的判断!
    上面说的很清楚,死锁的现象是pstack一直卡在某一行,此时,查看代码行,如果发现该代码行的确是LOCK,那么99%是死在这个锁上!
    解决死锁!
    是否存在AB顺序的加锁
    是否存在协程没有cbk,导致同步死等
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服