0%

linux 使用 ltrace 查看进程阻塞在哪里

在 web 应用中,我们有很大几率会遇到一个请求无响应的情况,这种情况往往是某些系统调用阻塞导致的(比如 MySQL、MongoDB 查询一直没有返回),我们该怎么来知道是什么原因导致的呢?

在 linux 下,我们可以使用 ltrace 来查看进程当前的状态。

使用方法:

script
1
ltrace -p 1234

这里的 1234 是进程 id。

但是有个需要注意的是,对于已经阻塞的进程,通过 ltrace 无法知道当前阻塞在什么系统调用上。不过如果可以在进程处理请求之前拿到进程 id 的话,就可以在请求到来之前先调用 ltrace,然后就可以看到请求过程中的系统调用。

另外有个类似的命令 strace。