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上了。就可以很快查處問題所在。