zoukankan      html  css  js  c++  java
  • Linux RPM命令阻塞问题

    最近使用rpm查看系统安装的软件包时,长时间不返回,Ctrl+Z命令也不能退出rmp命令。

    使用strace命令跟踪,发现阻塞在一个文件锁上:

    # strace rpm -aq |grep kernel

    ......
    rt_sigaction(SIGPIPE, NULL, {SIG_IGN, [], SA_RESTORER, 0x7fd029e2d370}, 8) = 0
    open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd02c59b000
    read(3, "MemTotal:       98064036 kB MemF"..., 1024) = 1024
    close(3)                                = 0
    munmap(0x7fd02c59b000, 4096)            = 0
    open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
    read(3, "0-23 ", 8192)                 = 5
    close(3)                                = 0
    umask(022)                              = 022
    open("/var/lib/rpm/.dbenv.lock", O_RDWR|O_CREAT, 0644) = 3
    umask(022)                              = 022
    fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}

    查看 /var/lib/rpm/.dbenv.lock 被哪个进程持有:

    # lsof /var/lib/rpm/.dbenv.lock
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    abrt-acti 9801 root    3uW  REG    8,2        0 2056506 /var/lib/rpm/.dbenv.lock

    把abrt-acti相关进程杀掉后,还是长时间不返回,但是CTRL+C可以退出命令。

    跟踪发现,是在对文件/var/lib/rpm/__db.002做futex 操作时,一直在等待;删除这个文件后,又出现SIGBUS错误。

    最终解决方法是重建rpm db信息,具体方法如下:

    1. rm /var/lib/rpm/*db*
    2. rpm -vv --rebuilddb
    3. rpm -qa  ##查询正常


    参考链接:
    https://bugzilla.redhat.com/show_bug.cgi?id=129599


  • 相关阅读:
    在小程序中实现 Mixins 方案
    watch监听(数组或者对象)
    --socket---网络通信---
    requests实战之破解百度翻译
    nmap命令
    selenium模块的基本使用
    谷歌无头浏览器+反检测
    模拟登录QQ空间
    动作链和iframe的处理
    selenium其他自动化操作
  • 原文地址:https://www.cnblogs.com/smith9527/p/Linux.html
Copyright © 2011-2022 走看看