簡介
SystemTap 是監控和跟蹤運行中的Linux 核心的操作的動態方法。這句話的關鍵字是動態,因為SystemTap 沒有使用工具構建一個特殊的核心,而是允許您在運行時動態地安裝該工具。
SystemTap 與一種名為DTrace 的老技術相似,該技術源於Sun Solaris 作業系統。在DTrace 中,開發人員可以用D 程式語言(C 語言的子集,但修改為支持跟蹤行為)編寫腳本。DTrace 腳本包含許多探針和相關聯的操作,這些操作在探針“觸發” 時發生。例如,探針可以表示簡單的系統調用,也可以表示更加複雜的互動,比如執行特定的代碼行。清單1 顯示了DTrace 腳本的一個簡單例子,它計算每個進程發出的系統調用的數量(注意,使用字典將計數和進程關聯起來)。該腳本的格式包含探針(在發出系統調用時觸發)和操作(對應的操作腳本)。DTrace 是Solaris 最引人注目的部分,所以在其他作業系統中開發它並不奇怪。
DTrace 是在Common Development and Distribution License (CDDL) 之下發行的,並且被移植到FreeBSD 作業系統中。
另一個非常有用的核心跟蹤工具是ProbeVue,它是IBM 為IBM? AIX? 作業系統6.1 開發的。您可以使用ProbeVue 探查系統的行為和性能,以及提供特定進程的詳細信息。這個工具使用一個標準的核心以動態的方式進行跟蹤。考慮到DTrace 和ProbeVue 在各自的作業系統中的巨大作用,為Linux 作業系統策劃一個實現該功能的開源項目是勢不可擋的。SystemTap 從2005 年開始開發,它提供與DTrace 和ProbeVue 類似的功能。許多社區還進一步完善了它,包括Red Hat、Intel、Hitachi 和IBM 等。
安裝SystemTap
在安裝SystemTap之前,需要確保系統中已經安裝了其它兩個軟體包:kernel-debuginfo RPM:SystemTap需要通過核心調試信息來定位核心函式和變數的位置。對於通常的發行版,並沒有安裝kernel-debuginfo
RPM,我們可以到發行版的下載站點下載。
elfutils RPM:SystemTap需要elfutils軟體包提供的庫函式來分析調試信息。目前的SystemTap要求安裝elfutils-0.123以上版本。目前最新的版本是0.124-0.1。如果需要,我們可以從SystemTap的站點下載RPM或者源碼來升級。接下來就可以安裝SystemTap了,這有通過RPM或者源碼安裝兩種方式:
(1).通過RPM安裝Fedora Core 6預設情況下已經安裝了systemtap。
(2).通過源碼安裝:從SystemTap的FTP站點下載最新的源碼
然後安裝如下:
/root > tar -
jxf SystemTap
/root > cd src
/root/src> ./configure
/root/src> make
/root/src> make install
運行SystemTap
運行SystemTap首先需要root許可權。
運行SystemTap有三種形式:
(1).從檔案(通常以.stp作為檔案名稱後綴)中讀入並運行腳本:stap [選項] 檔案名稱
(2).從標準輸入中讀入並運行腳本:stap [選項] -
(3).運行命令行中的腳本:stap [選項] -e 腳本
(4).直接運行腳本檔案(需要可執行屬性並且第一行加上#!/usr/bin/stap):
./腳本檔案名稱使用"Ctrl+C"中止SystemTap的運行。
systemtap的選項還在不斷的擴展和更新中,其中最常用的選項包括:
-v -- 列印中間信息
-p NUM -- 運行完Pass Num後停止(預設是運行到Pass 5)
-k -- 運行結束後保留臨時檔案不刪除
-b -- 使用RelayFS檔案系統來將數據從核心空間傳輸到用戶空間
-M -- 僅當使用-b選項時有效,運行結束時不合併每個CPU的單獨數據檔案
-o FILE -- 輸出到檔案,而不是輸出到標準輸出
-c CMD -- 啟動探測後,運行CMD命令,直到命令結束後退出
-g -- 採用guru模式,允許腳本中嵌入C語句
其它更多選項請參看stap的手冊。