strace 简介
strace 命令是一种强大的工具, 能够显示任何由用户空间程式发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. strace 从内核接收信息, 而且无需以任何特别的方式来构建内核. strace 的每一行输出包括系统调用名称, 然后是参数和返回值.
比如close-wait状态过多的情况下
如果仅仅考虑服务代码有问题的话,可以考虑服务器代码在接受到fin后,没有发出fin。有可能没有调用close函数关闭socket。
还有可能是程序阻塞在某个io上。
那怎么快速定位到这行代码上呢。
就可以使用strace工具。
strace -o look_problem ./service_name
系统调用到结果就会放到look_problem文件中。 ./service_name是你的服务器的名字。
通过look_problem可以看到函数调用的结果,如果看到没有close函数的话,那说明可能是服务器在收到fin后没有调用close函数。
如果look_problem日志打在一个io函数上,那说明程序可能阻塞在某个io上了。就可以很快查处问题所在。