關於使用strace調試網絡程序

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

發佈了21 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章