SystemTap是運維調試利器
如何建設一個網站:SystemTap是運維調試利器。
只用Wireshark抓包,流程思想和TcpDump是類似的,同樣需要選擇監聽的網卡(這
裏包括是否用混雜模式),填寫基本的過濾條件和表達式等。考慮到圖形界面不適合在服
務器端運行,故在這裏不進行闡述。
在已經擁有TcpDump導出的數據包後,可以將其導入Wireshark查看,界面如圖1-5
所示。圖1-5顯示的界面相當清新。在filter中填寫過濾條件時會有自動補全的提示。比
如,只需要寫“http.res”,就自動提示了“http.response.code”。在第二行中,顯示的是解
碼後的信息,並且以協議層次作爲樹結構展示,這樣大大提高了數據的可讀性。
其中,qualifier只能是trace、abbrev、verbose、raw、signal、read、write其中之一,
默認爲trace。舉例如下。
◎ -eopen:等價於.e trace=open,表示只跟蹤open調用。
◎ -etraceI =open:跟蹤除了open以外的其他調用。
除了具體的系統調用以外,還可以指定跟蹤某一類的系統調用,包括file、process、
network、signal和ipc,分別代表文件操作、進程操作、網絡操作、信號操作和進程間通信。
另一個常用qualifier是signal,用來指定跟蹤的系統信號,默認爲all。如signal=! SIGIO
(或者signal= !io),表示不跟蹤SIGIO信號。
在strace的輸出中,我們經常看到大量的“ENOENT(No such file or directory)”,這是
因爲Linux本身對動態庫和頭文件等的存放位置是都多處記錄的,需要全部查詢來進行查
找。比如下面這樣。
以在不中斷和影響進程運行的情況下,暴露出其內部變量和事件信息等。
SystemTap的主要工作方式是由使用者書寫一種類似awk語法的腳本語言(一般我們
會保存成.stap/.stp文件),然後根據stap腳本自動生成一個臨時的內核模塊並加載進內核
運行。
注意它需要使用Linux的Utrace特性來探測用戶空間,所以目前對默認不支持Utrace
的Debian系服務器來說,SystemTap還不太方便使用。但對於生產線上更常見的RedHat
系服務器,SystemTap無疑是運維調試利器。
本文轉自:http://www.yishenzhou.com/bkNews/Detail/477