摘要:Solaris 10中的動(dòng)態(tài)跟蹤框架是一個(gè)全新的功能組件,它能夠全面的監(jiān)控操作系統(tǒng)性能以及應(yīng)用程序的狀態(tài),有效增強(qiáng)系統(tǒng)整體穩(wěn)定性。然而由于沒(méi)有圖形化界面,觀測(cè)結(jié)果不直觀。該文在分析了動(dòng)態(tài)跟蹤框架工作機(jī)理的基礎(chǔ)上,實(shí)現(xiàn)了其圖形化顯示模塊,在易用性,直觀性方面有了很大提高。
關(guān)鍵詞:Solaris;動(dòng)態(tài)跟蹤框架;Dtrace;圖形化
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)29-0372-02
The Design and Application of Dynamic Tracing Based on Solaris
CHEN Lu-yang, JIN Wei-zu
(School of Software Engineering,Tongji University,Shanghai 201804,China)
Abstract: The framework of Dynamic Tracing is a new feature in Solaris 10, it can monitor the overall performance of the operating system and the state of application, enhance the overall stability. However, due to no graphical interface, usage is not easy. Based on the analysis of mechanism of the dynamic tracking,achieve its graphical display module, the ease of use, intuitive aspects has been greatly improved.
Key words: Solaris; dynamic tracing; Dtrace; graphic
1 引言
生產(chǎn)環(huán)境下的操作系統(tǒng)能否工作穩(wěn)定,不僅取決于操作系統(tǒng)本身源代碼的質(zhì)量,更需要我們可以時(shí)刻掌握,監(jiān)測(cè)操作系統(tǒng)內(nèi)核和用戶(hù)應(yīng)用程序的工作狀態(tài),Solaris10中的動(dòng)態(tài)跟蹤框架就是對(duì)這一問(wèn)題的完美解決。通過(guò)它我們可以動(dòng)態(tài)監(jiān)測(cè)操作系統(tǒng)的工作狀態(tài),時(shí)刻了解OS上應(yīng)用程序的表現(xiàn),這些信息能夠幫助我們極大的提高對(duì)當(dāng)前狀況的把握程度,在遇到性能,穩(wěn)定性等問(wèn)題時(shí),迅速找到問(wèn)題的癥結(jié)并加以解決。
動(dòng)態(tài)跟蹤框架,也即Dynamic Tracing,是Solaris10操作系統(tǒng)中引入的一個(gè)新的功能。透過(guò)這一新功能,用戶(hù)能夠動(dòng)態(tài)監(jiān)測(cè)操作系統(tǒng)內(nèi)核和用戶(hù)進(jìn)程,以更加精確地掌握系統(tǒng)的資源使用狀況,提高系統(tǒng)性能,減少支持成本。
2 Dtrace原理
在Solaris10之前,Solaris已經(jīng)擁有相當(dāng)豐富的系統(tǒng)觀察工具,比如truss,vmstat,iostat等等。然而即使這些工具每個(gè)功能都很強(qiáng)大,但它們也是十分有限的,只能固定地觀察系統(tǒng)的特定部分。不僅如此,每個(gè)工具在操作上是彼此脫節(jié)的。另外,所有的工具使用不同的方式表達(dá)數(shù)據(jù),通常使用不同的接口。
Solaris動(dòng)態(tài)跟蹤技術(shù)有效的解決了這些問(wèn)題。用這個(gè)子系統(tǒng),我們可以相當(dāng)準(zhǔn)確地觀察從應(yīng)用程序的指令到系統(tǒng)內(nèi)核底層,任何系統(tǒng)和應(yīng)用程序的行為。它使用最少的工作負(fù)荷,在 Solaris 10操作系統(tǒng)中內(nèi)嵌4萬(wàn)多個(gè)追蹤點(diǎn),提供了極為強(qiáng)大的追蹤過(guò)濾功能。我們可以根據(jù)自己的興趣選擇所要觀察的對(duì)象,動(dòng)態(tài)的打開(kāi)和關(guān)閉觀察點(diǎn);更難能可貴的是它有很好的性能,在生產(chǎn)環(huán)境下打開(kāi)這套系統(tǒng)不會(huì)對(duì)應(yīng)用性能有什么影響,它足夠安全,不會(huì)因?yàn)橛^察某個(gè)應(yīng)用而對(duì)應(yīng)用本身產(chǎn)生不良的后果。
Dtrace架構(gòu)可以簡(jiǎn)單的理解為”Dtrace提供器(Provider)和Dtrace使用者(Consumer)”模式。
“提供器”提供了”探測(cè)器”,而”使用者”通過(guò)libdtrace(3LIB)庫(kù)和相應(yīng)的設(shè)備文件或者其它方式來(lái)使用“提供器”提供的“探測(cè)器”。Solaris10中有一些消費(fèi)者,如lockstat(1M),plockstat(1M)和intrstat(1M),但是主要訪(fǎng)問(wèn)Dtrace工具的消費(fèi)者是dtrace(1M)消費(fèi)者。一個(gè)消費(fèi)者的基本工作就是與Dtraace內(nèi)核子系統(tǒng)交互探測(cè)具體描述信息,并處理從探測(cè)器返回的信息。
3 Solaris下Dtrace的使用方法
dtrace(1M)可以以命令行形式調(diào)用,也可以通過(guò)D-script調(diào)用。D-script是用Dtrace提供的D語(yǔ)言來(lái)編寫(xiě)的腳本程序。D語(yǔ)言類(lèi)似于C和awk,但是沒(méi)有程序控制如for,if等機(jī)制。
命令行調(diào)用的例子:dtrace -n 'syscall::open*:entry{trace(execname)}'
D-script例子:
#!/usr/sbin/dtrace –s
syscall::exec:return
/pid ==123/
{
printf(“%s”,execname);
}
D Script 有自己專(zhuān)用的簡(jiǎn)單命令定義語(yǔ)言(D語(yǔ)言)。D語(yǔ)言的三個(gè)要素分別是監(jiān)控點(diǎn)、監(jiān)控條件和輸出格式。
不管是命令行方式還是腳本方式,都至少要指定一個(gè)探測(cè)器。每個(gè)探測(cè)器都是一個(gè)“四元組(4-tuple)\",分別為提供者,模塊,函數(shù),名字。其中模塊與函數(shù)部分可以省略。
1) Provider:追蹤點(diǎn)所屬的目標(biāo)內(nèi)核模塊集或庫(kù)。
2) Module:目標(biāo)模塊名稱(chēng)(此參數(shù)可省略)。
3) Function:程序功能的名稱(chēng),如系統(tǒng)調(diào)用名稱(chēng)等(此參數(shù)可省略)。
4) Probe:指定將要獲得追蹤信息的條件或追蹤點(diǎn)(此參數(shù)通常表示功能中的一個(gè)位置)。指定將要獲得追蹤信息的條件或追蹤點(diǎn) (此參數(shù)通常表示功能中的一個(gè)位置)。
當(dāng)運(yùn)行某個(gè)Dtrace腳本時(shí),Dtrace程序會(huì)自動(dòng)加載到內(nèi)核中,相應(yīng)的監(jiān)測(cè)點(diǎn)被激活,如果有符合監(jiān)控條件的事件發(fā)生,也即監(jiān)控條件為true時(shí),相應(yīng)的操作就會(huì)被執(zhí)行。按Ctrl+C會(huì)立即結(jié)束執(zhí)行,激活的監(jiān)測(cè)點(diǎn)自動(dòng)釋放,就好象什么都沒(méi)有發(fā)生過(guò),對(duì)操作系統(tǒng)的運(yùn)行不會(huì)產(chǎn)生任何的不良影響。
4 基于Dtrace的系統(tǒng)檢測(cè)工具
考慮到Dtrace使用對(duì)于普通用戶(hù)的復(fù)雜性,同時(shí)由于Dtrace檢測(cè)的內(nèi)容相當(dāng)龐大,我們就把常用的系統(tǒng)檢測(cè)功能用Dtrace進(jìn)行實(shí)現(xiàn),提供了一組可供程序員使用的API接口。同時(shí)為了方便用戶(hù)的使用,該工具以更加人性化的圖形界面將檢測(cè)結(jié)果呈現(xiàn)出來(lái)。
5 結(jié)束語(yǔ)
DTrace 為每位運(yùn)行 Solaris OS的開(kāi)發(fā)者和客戶(hù)提供了一款用于進(jìn)行性能分析的功能極其強(qiáng)大的工具。Dtrace 使他們能夠以先進(jìn)的觀察方式觀察所擁有的系統(tǒng),以了解系統(tǒng)的工作方式。使用 Dtrace 的結(jié)果是,開(kāi)發(fā)質(zhì)量更高的應(yīng)用程序,降低成本,減少停機(jī)時(shí)間以及更好地利用現(xiàn)有資源,以提高 ROI。程序員API接口和圖形化界面的實(shí)現(xiàn),使得程序員和普通用戶(hù)能夠更加方便的使用Dtrace進(jìn)行系統(tǒng)檢測(cè)。
參考文獻(xiàn):
[1] Sun Microsystems Inc.Solaris Dynamic Tracing Guide[S].2005.
[2] BigAdmin System Administration Portal[EB/OL].http://www.sun.com/bigadmin.
[3] Richard McDougall.Solaris性能與工具[M].北京:機(jī)械工業(yè)出版社,2007.
[4] Richard McDougall.Solaris內(nèi)核結(jié)構(gòu)[M].北京:機(jī)械工業(yè)出版社,2007.