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


  • 相关阅读:
    新四军的7个师,以及粟裕的山头背景
    基于easyui的webform扩展
    Mac入门(一)基本用法
    HtmlAgilityPack实战代码
    摄像头、麦克风、扬声器测试程序
    依赖注入(IOC)
    类型
    C#私房菜[二][提供编程效率的技巧]
    Fluent Nhibernate code frist简单配置
    Ubuntu环境搭建系列—JavaEE篇
  • 原文地址:https://www.cnblogs.com/smith9527/p/Linux.html
Copyright © 2011-2022 走看看