strace簡介
strace是一個用于跟蹤系統調用和信號傳遞的Linux命令,它是一個集診斷、調試、統計于一體的工具。strace可以監控用戶空間進程和內核的交互,比如系統調用、信號傳遞、進程狀態變更等。它底層使用內核的ptrace特性來實現其功能。
strace最簡單的用法是執行一個指定的命令,在命令執行的過程中,strace會記錄和解析該進程的所有系統調用以及所接收到的所有信號值。通過strace對應用的系統調用和信號傳遞的跟蹤結果,可以對應用進行分析,以達到解決問題或者是了解應用工作過程的目的。
我的理解
strace是一種經常被support或者開發測試粗粒度調查問題的極好用的工具。遇到問題茫然無知,只看到進程報錯,這是第一步;然后啟用放大鏡strace,它能看到系統調用函數這一層,對support基本夠用了,他能看看哪個函數返回-1了或者卡主了或者與沒問題的版本比是否多調用了哪個函數等等;最后一層那就是啟用顯微鏡了,也就是到了源代碼這一層,用gdb調試。gdb雖然厲害,但是信息太多,那么多代碼沒有點經驗的話可就屬于大海撈針了。遇到問題何不先用輕武器strace試試?
strace定位問題例子一
客戶問題:客戶replication功能不好用,具體是兩端sync不上。
客戶本人很厲害,自己用strace看到connect函數返回問號,如下所示:
uvrepmanager process:
13:56:51.780992 msgrcv(4, {1000, "\16\0\0\0\371\377\377\377\213\t\0\0As you can see, the timing does not exactly match, ho