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


  • 相关阅读:
    微信小程序地图组件中的include-points怎样缩放视野并将所有坐标点在规定的视野内展示?
    两种常见的mysql集群架构
    layui+oss阿里云附件上传回调报错问题
    redis hash过期时间
    Static和Extern关键字理解
    代理模式
    中介者模式
    访问者模式
    模板方法模式
    迭代器模式
  • 原文地址:https://www.cnblogs.com/smith9527/p/Linux.html
Copyright © 2011-2022 走看看