linux线程卡死在recvfrom,2018-03-12 使用strace定位到了系统故障——yum,rpm相关命令都卡主不动了...

通过top查看这个进程的状态

这个进程的pid是26466,进程状态为S(Sleep),CPU为0.0。进程状态和CPU都暗示我们,当前进程正阻塞在某个系统调用。

这个时候,有一个很好使的命令:strace,可以跟踪进程的所有系统调用,我们来看看

~$ strace -T -tt -e trace=all -p 26466

Process 26466 attached

19:21:34.746019 recvfrom(3,

可以看到,进程卡在了recvfrom这个系统调用,对应的文件描述符(file descriptor)是3,其实通过recvfrom这个名字,大致也能定位问题。

关于文件描述符,还有一个更实用的命令,lsof(list open file),可以看到当前进程打开的所有文件,在linux下,一切皆文件,自然也就包括了socket。

top 看 pid ,cpu使用和是否为sleep状态

strace -T -tt -e trace=all -p 75506

查看对进程的系统调用的跟踪

看到卡在fcntl()函数,文件描述符为3

lsof -p 75506|grep 3u

使用文件描述符查找到文件

那个fcntl函数 最后就一直没有输出个 =0 或者什么值?

正常的话就要输出 =0 了

(对比了本地ten服务器上的输出)

lsof | grep /var/lib/rpm/.dbenv.lock

定位卡主的这个文件被哪些程序占用了

应该杀掉没有用的占用了那个文件锁的process

那幅图显示的都是yum命令,第二列是pid,你可以在刚才的命令后面追加一个管道 "|awk '{print $2}'|xargs kill -9" 杀掉那些一直卡住的 yum 命令

确保没有无用程序占用那个锁文件就可以了

前一个yum还没执行完又不停地启动新的yum,最后就卡在那个锁文件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值