我們總是時不時的提起調(diào)試?,F(xiàn)在我們就好好看看這玩意兒。寬泛點說,調(diào)試就是在系統(tǒng)中發(fā)現(xiàn)和修復(fù)問題的行為,包括硬件和軟件。性能問題也認(rèn)為是bug,所以調(diào)試也包括性能調(diào)優(yōu),也就是尋求通過去除處理過程中的瓶頸來改善性能。接下來,我們會提到調(diào)試的過程、內(nèi)核錯誤以及性能問題。暫時不涉及硬件調(diào)試。
錯誤分析如果一個進(jìn)程發(fā)生了錯誤,大多數(shù)的操作系統(tǒng)會把錯誤信息寫進(jìn)日志文件從來警告管理員或用戶有問題發(fā)生了。操作系統(tǒng)也會用core dump(核心轉(zhuǎn)儲),是進(jìn)程地址空間的內(nèi)容以及有關(guān)進(jìn)程狀態(tài)的其他信息寫出的一個磁盤文件,用來之后分析。運(yùn)行的程序和core dump可以通過調(diào)試器探測到,這可以讓程序員檢查代碼并且查看失敗時進(jìn)程地址空間到底發(fā)生了什么。
調(diào)試用戶級別的進(jìn)程代碼是一個挑戰(zhàn)。因為內(nèi)核的大小和復(fù)雜度,操作系統(tǒng)的內(nèi)核調(diào)試更是復(fù)雜,它既控制著硬件,有缺少用戶級別的調(diào)試工具。當(dāng)crash發(fā)生時,錯誤信息會被保存到日志文件中,內(nèi)存狀態(tài)信息會被保存到crash dump。
操作系統(tǒng)的調(diào)試和進(jìn)程調(diào)試,因為這兩個任務(wù)天生的不同而通常使用不同的工具和技術(shù)??紤]到文件系統(tǒng)代碼中的內(nèi)核故障會導(dǎo)致內(nèi)核在重啟之前嘗試將其狀態(tài)保存到下文件系統(tǒng)上的文件中的風(fēng)險,一種常見的技術(shù)是將內(nèi)核的內(nèi)存狀態(tài)保存到為此保留的一部分磁盤中,該部分不包含文件系統(tǒng)。如果內(nèi)存檢測到不可回復(fù)的錯誤,則會將內(nèi)存的全部內(nèi)容,或至少是系統(tǒng)內(nèi)存中內(nèi)核擁有的部分,寫入該磁盤區(qū)域。當(dāng)系統(tǒng)重啟時,將運(yùn)行一個進(jìn)程從該區(qū)域收集數(shù)據(jù)并將其寫入文件系統(tǒng)中的crash dump文件中以進(jìn)行分析。顯然,這樣的策略對于調(diào)試普通的用戶進(jìn)程是沒有必要的。
性能監(jiān)測和調(diào)優(yōu)我們之前性能調(diào)優(yōu)就是提過通過去除處理過程中瓶頸來尋求改善性能。為了識別瓶頸,我們必須能夠監(jiān)測系統(tǒng)性能呢個。因此,操作系統(tǒng)必須有一些方式用來計算和展示系統(tǒng)的行為。根據(jù)是按每個進(jìn)程或整個系統(tǒng)的觀測角度的不同,每個工具都有自己的特征。為了達(dá)成這些觀測,工具會使用這兩個方法中的一個 --- counters計數(shù)或追蹤tracing。下面,我們會探究一下這倆玩意兒。
計數(shù)器操作系統(tǒng)通過一系列的計數(shù)器保持對系統(tǒng)行為的追蹤,比如系統(tǒng)調(diào)用的次數(shù)或是對網(wǎng)絡(luò)設(shè)備或磁盤的操作次數(shù)。下面是Liunx用作計數(shù)器的工具:
進(jìn)城級ps - 報告對單個或選中進(jìn)程的信息top - 報告當(dāng)前進(jìn)程們的實時統(tǒng)計信息系統(tǒng)級vmstat - 報告內(nèi)存使用的統(tǒng)計netstat - 報告網(wǎng)絡(luò)接口門的統(tǒng)計信息iostat - 包括對磁盤的I/O使用情況在Linux中大多數(shù)基于計數(shù)的工具都是從/proc文件系統(tǒng)里讀取統(tǒng)計信息的。/proc是一個假的文件系統(tǒng),它只存在于內(nèi)核的內(nèi)存中,并且主要被用來查尋各個進(jìn)程和內(nèi)核的統(tǒng)計信息。/ proc文件系統(tǒng)組織為目錄層次結(jié)構(gòu),每個進(jìn)程(分配給每個進(jìn)程的唯一整數(shù)值)顯示為/ proc下的子目錄。例如,目錄條目/ proc / 2155將包含ID為2155的進(jìn)程的每個進(jìn)程統(tǒng)計信息。/proc這也有各種條目,用于各種內(nèi)核統(tǒng)計信息,如下圖:
Unbuntu中也提供了一個系統(tǒng)監(jiān)測應(yīng)用,一個包含進(jìn)程進(jìn)程,系統(tǒng)資源,和文件系統(tǒng)信息的工具。截圖如下:
Ubuntu中的系統(tǒng)監(jiān)測工具
追蹤盡管基于計數(shù)的工具只是簡單的查詢內(nèi)核維護(hù)的某些統(tǒng)計信息中的當(dāng)前值,但追蹤工具則收集一些特殊時間的數(shù)據(jù),諸如系統(tǒng)調(diào)用中包含的每一步。
下面是Linux中追蹤事件工具的示例:
進(jìn)程級strace - 追蹤單個進(jìn)程的系統(tǒng)調(diào)用gdb - 一個源代碼級的調(diào)試器系統(tǒng)級perf - Linux性能收集工具tcpdump - 采集網(wǎng)絡(luò)包柯林漢定律 (Kernighan's Law)
調(diào)試在一開始就比編寫程序困難一倍。因此,按照定義,如果你的代碼寫得非常巧妙,那么你就沒有足夠的能力來調(diào)試它。
使操作系統(tǒng)在運(yùn)行時更易于理解,調(diào)試和調(diào)優(yōu)是研究和實踐的活躍領(lǐng)域。新一代支持內(nèi)核的性能分析工具在實現(xiàn)此目標(biāo)的方式上有了重大改進(jìn)。接下來,我們討論BCC,一個動態(tài)Linux內(nèi)核追蹤工具包。
BCC如果沒有能夠理解兩組代碼并能夠檢測它們之間的交互作用的工具集,幾乎不可能調(diào)試用戶級代碼與內(nèi)核代碼之間的交互。為了使該工具集真正有用,它必須能夠調(diào)試系統(tǒng)的任何區(qū)域,包括未考慮調(diào)試的部分,并且在不影響系統(tǒng)可靠性的情況下進(jìn)行調(diào)試。該工具集還必須對性能產(chǎn)生最小的影響-理想情況下,它在不使用時不受影響,而在使用中的影響是不成比例。 BCC工具箱滿足了這些要求,并提供了動態(tài),安全,低影響的調(diào)試環(huán)境。
BBC(BPF Compiler Collection)是個豐富的工具包,用于提供對Linux系統(tǒng)的追蹤。BCC是e BPF(extended Berkeley Packet Filter,擴(kuò)展的Berkeley數(shù)據(jù)包過濾器)工具的前端接口。 BPF技術(shù)是在1990年代初開發(fā)的,用于過濾計算機(jī)網(wǎng)絡(luò)中的流量。 “extened擴(kuò)展的” BPF(e BPF)為BPF添加了各種功能。 BPF程序是用C的子集編寫的,并被編譯成e BPF指令,這些指令可以動態(tài)地插入正在運(yùn)行的Linux系統(tǒng)中。 e BPF指令可用于捕獲特定事件(例如正在調(diào)用的某個系統(tǒng)調(diào)用)或監(jiān)視系統(tǒng)性能(例如執(zhí)行磁盤I / O所需的時間)。為了確保BPF指令的行為良好,在插入運(yùn)行Linux內(nèi)核之前,它們會通過verifier驗證者傳入。驗證者會進(jìn)行檢查以確保說明不會影響系統(tǒng)性能或安全性。
盡管e BPF為Linux內(nèi)核中的跟蹤提供了豐富的功能集,但是從傳統(tǒng)上來說,使用其C接口開發(fā)程序非常困難。開發(fā)BCC的目的是通過在Python中提供一個前端接口來簡化使用e BPF編寫工具的過程。 BCC工具是用Python編寫的,它嵌入了與e BPF工具接口的C代碼,后者又與內(nèi)核接口。 BCC工具還將C程序編譯為e BPF指令,并使用探測或?qū)⑵涓欬c插入內(nèi)核中,這是兩種允許在Linux內(nèi)核中跟蹤事件的技術(shù)。
編寫自定義BCC工具的細(xì)節(jié)不在討論范圍之內(nèi),但是BCC軟件包提供了許多現(xiàn)有工具,用于監(jiān)視正在運(yùn)行的Linux內(nèi)核中多個活動區(qū)域。
ubuntu下的安裝命令如下:
sudo apt-get install bpfcc-tools linux-headers-$(uname -r)其他系統(tǒng)可參考https://github.com/iovisor/bcc/blob/master/INSTALL.md
使BCC特別強(qiáng)大的是,它的工具可以在運(yùn)行關(guān)鍵應(yīng)用程序的實時生產(chǎn)系統(tǒng)上使用,而不會對系統(tǒng)造成損害。這對于必須監(jiān)視系統(tǒng)性能以識別可能的瓶頸或安全漏洞的系統(tǒng)管理員特別有用。下圖說明了BCC和e BPF當(dāng)前提供的各種工具,以及它們跟蹤Linux操作系統(tǒng)的幾乎任何區(qū)域的能力。 BCC是一種快速變化的技術(shù),不斷地被添加新功能。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長刪除。
轉(zhuǎn)載請注明出處http://macbookprostickers.com/xintu/20766.html