在 web 应用中,我们有很大几率会遇到一个请求无响应的情况,这种情况往往是某些系统调用阻塞导致的(比如 MySQL、MongoDB 查询一直没有返回),我们该怎么来知道是什么原因导致的呢?
在 linux 下,我们可以使用 ltrace
来查看进程当前的状态。
使用方法:
1 | ltrace -p 1234 |
这里的 1234 是进程 id。
但是有个需要注意的是,对于已经阻塞的进程,通过
ltrace
无法知道当前阻塞在什么系统调用上。不过如果可以在进程处理请求之前拿到进程 id 的话,就可以在请求到来之前先调用ltrace
,然后就可以看到请求过程中的系统调用。
另外有个类似的命令 strace。