我可以找到有关正在运行的线程上的 eventpoll 的哪些信息?

我可以找到有关正在运行的线程上的 eventpoll 的哪些信息?

继“我如何将 strace 附加到不在 ps 输出中的进程?

我正在尝试调试一个半挂起的进程。

通过strace -f在我的父进程上使用,我能够确定我有一堆正在显示的线程:

# strace -p 26334
Process 26334 attached - interrupt to quit
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, ^C <unfinished ...>
Process 26334 detached

进一步调查:

# readlink /proc/26334/fd/607
anon_inode:[eventpoll]

我的直觉告诉我,我已经设法让一些线程陷入僵局,但我对epoll继续前进的了解还不够。是否有任何命令可以让我深入了解这些线程正在轮询的内容,或者此 epoll 描述符映射到哪些文件描述符。

答案1

当您运行strace这些行时,它返回的是系统函数。如果它不是很明显,epoll_wait()您可以执行以下操作man epoll_wait找出实现细节,如下所示:

   epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor

的描述epoll

epoll API 执行与 poll(2) 类似的任务:监视多个文件描述符以查看其中任何一个是否可以进行 I/O。 epoll API 可以用作边缘触发或级别触发接口,并且可以很好地扩展到大量监视的文件描述符。

因此看起来您的进程正在文件描述符上阻塞,等待查看是否可以在其中任何一个上进行 I/O。

我会稍微改变我的策略,并尝试lsof -p <pid>看看是否可以缩小这些文件的实际范围。

相关内容