gpt4 book ai didi

linux - 您如何确定哪个进程正在用尽 Linux aio 上下文容量?

转载 作者:太空狗 更新时间:2023-10-29 12:23:40 26 4
gpt4 key购买 nike

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

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

最佳答案

没有简单的方法。至少,不是我曾经发现的!但是,您可以使用 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 那样简单,但我认为这就是我们所拥有的!

关于linux - 您如何确定哪个进程正在用尽 Linux aio 上下文容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com