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

  1. 通过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这个名字,大致也能定位问题。

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

  2. 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,最后就卡在那个锁文件了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容