我如何知道Linux进程正在等待什么?

我试图找出在Linux下正在debugging的应用程序中性能瓶颈的原因。 所涉及的各种进程似乎花费了大量的时间阻塞I / O请求,我想知道是否有人知道任何Linux技巧,让你明白为什么一个特定的进程被阻止/它正在等待什么资源? 例如在/proc有什么有用的东西?

Solutions Collecting From Web of "我如何知道Linux进程正在等待什么?"

无论进程是什么,你都使用top来检查状态。 然后你可以通过桁架或strace运行它。 这应该详细说明发生了什么事情。 如果这是不可能的,挂钩到gdb 。 像iostat这样的工具可能会向您显示一般情况(如磁盘是瓶颈)。

你可以使用strace命令来查看你的进程是什么。 你也可能发现在你的进程上运行lsof来查看它使用的是什么文件和套接字是很有用的。

strace是你的朋友,因为你可以花费在每个系统调用上的时间,再加上你可以选择你感兴趣的文件描述符和系统调用。但是你也可以从内核获得支持:看看latencytop