【问题标题】:How do you determine which process is using up Linux aio context capacity?您如何确定哪个进程正在使用 Linux aio 上下文容量?
【发布时间】:2018-04-10 01:18:49
【问题描述】:

在 Linux 中,您可以读取 /proc/sys/fs/aio-nr 的值,这将返回总数。在系统中所有活动的 aio 上下文中分配的事件数。最大值由/proc/sys/fs/aio-max-nr 控制。

有没有办法判断哪个进程负责分配这些 aio 上下文?

【问题讨论】:

    标签: linux linux-kernel aio


    【解决方案1】:

    没有简单的方法。至少,我从来没有发现过!但是,您可以使用systemtap 看到它们被消耗和释放。

    https://blog.pythian.com/troubleshooting-ora-27090-async-io-errors/

    尝试执行那篇文章中的完整脚本在我的 Centos 7 系统上产生了错误。但是,如果你只看它的第一部分,即记录分配的部分,它可能会给你足够的洞察力:

    stap -ve '
    global allocated, allocatedctx
    
    probe syscall.io_setup {
      allocatedctx[pid()] += maxevents; allocated[pid()]++;
      printf("%d AIO events requested by PID %d (%s)\n",
        maxevents, pid(), cmdline_str());
    }
    '
    

    您需要协调一些事情,以便在您的工作负载开始之前 运行 systemtap。

    安装systemtap,然后执行上面的命令。 (注意,我已经从链接的文章中稍微改变了这一点,删除了未使用的freed 符号。)几秒钟后,它将运行。然后,开始你的工作量。

    Pass 1: parsed user script and 469 library scripts using 227564virt/43820res/6460shr/37524data kb, in 260usr/10sys/263real ms.
    Pass 2: analyzed script: 5 probes, 14 functions, 101 embeds, 4 globals using 232632virt/51468res/11140shr/40492data kb, in 80usr/150sys/240real ms.
    Missing separate debuginfos, use: debuginfo-install kernel-lt-4.4.70-1.el7.elrepo.x86_64
    Pass 3: using cached /root/.systemtap/cache/55/stap_5528efa47c2ab60ad2da410ce58a86fc_66261.c
    Pass 4: using cached /root/.systemtap/cache/55/stap_5528efa47c2ab60ad2da410ce58a86fc_66261.ko
    Pass 5: starting run.
    

    然后,一旦您的工作负载开始,您将看到记录的上下文请求:

    128 AIO events requested by PID 28716 (/Users/blah/awesomeprog)
    128 AIO events requested by PID 28716 (/Users/blah/awesomeprog)
    

    所以,不像lsof那么简单,但我认为这就是我们所拥有的一切!

    【讨论】:

    • 非常酷 - 成功了!事实证明,我遇到了一个没有正确计算 aio-nr 的 Linux 内核错误。他们在 4.16 内核中修复了它,看起来像这样。 github.com/torvalds/linux/commit/…
    • 哇...感谢您发布有关该错误的信息!很高兴 systemtap 对你有用!
    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多