Linux效能優化 第八章 實用工具:效能工具助手
8.1效能工具助手
Linux有豐富的工具,這些工具組合來使用會更加強大。效能工具也一樣,單獨使用雖然也沒有問題,但是和其他的工具組合起來就能顯著提高有效性和易用性。
8.1.1 自動執行和記錄命令
如同前面章節所述,效能調查最有價值的步驟之一就是儲存在調查過程中發出的命令和產生的結果。Linux提供了兩個命令:tee和script,前者能夠將工具的輸出儲存為檔案,後者能記錄每個按鍵和螢幕上的每一個輸出。這些資訊儲存下來,便於以後的檢視。
自動執行命令很重要,因為它可以減少出錯的機會,是你在思考問題時不需記住所有的細節。在你一次性鍵入又長又複雜的命令列之後,bash shell和watch命令能夠可以讓你週期性地自動執行這些命令,不需要再次輸入。
8.1.2 效能統計資訊的繪圖與分析
Linux有提供gnumeric電子表格,沒有裝圖形介面,不介紹。
8.1.3 調查應用程式使用的庫
還有一些Linux的工具能使你確定應用程式使用了哪些庫,以及顯示給定庫提供的所有函式。ldd命令給出一個特定應用程式使用的全部共享庫的列表。在你想要跟蹤被應用程式使用的庫的數量和位置時,這個命令很有效。Linux中還有一個命令,objdump,它可以在指定庫或應用程式中搜索並顯示其提供全部函式。ltrace只能給出一個應用程式呼叫函式的名稱,但是結合命令ldd和objdump,你就能夠利用ltrace的輸出來確定指定函式屬於哪個庫。
8.1.4 建立和除錯應用程式
這個需要gcc工具,不介紹。
8.2 工具
8.2.1 bash
bash是Linux預設的shell,在每次使用Linux的時候,最有可能使用到它。bash通常用來編寫功能強大的指令碼,但是也可以直接在命令列中呼叫,從而能夠讓一些複雜的任務自動化。
bash執行時指令碼選項,使用while來週期性執行命令
選項 |
說明 |
while condition |
條件為真時,迴圈執行 |
do |
表示迴圈開始 |
done |
表示迴圈結束 |
用例示範,ifconfig不能週期性顯示它們的統計資訊,我們可以使用while來週期性執行ifconfig命令,用來查詢接收資料包的實時情況。
while true;do sleep 1;ifconfig eth0|grep "RX packets";done; |
8.2.2 tee
tee是個簡單的命令,可以將命令的標準輸出儲存為檔案並且同時進行顯示。在想要儲存並同時檢視效能工具輸出的時候,tee是很有幫助的。比如,正在監控一個實時系統的效能統計資訊的同時,儲存這些資料已備將來對它們進行分析。
語法: -a是追加模式,否則會直接覆蓋檔案
<command>|tee [-a] [file] |
用法示例
vmstat 1 5 |tee /tmp/vmstat_out |
8.2.3 script
script命令可以將一個shell會話過程中產生的全部輸入和輸出儲存為文字檔案。在調查效能問題的時候,準確記錄被執行的命令是很有用的,因為你可以在之後的時間檢視執行過的測試。
script命令在執行的時候會啟動一個新的shell,並記錄這個shell存續期間所有的鍵盤動作和輸入,已經生成的輸出,並儲存為檔案。如果螢幕的輸出有彩色或者加粗,會在輸出檔案中顯示為esc字元。可以把TERM環境變數設定為dumb來解決。export TERM=dumb
語法:-a是追加輸入,-t是增加計時資訊
script [-a] [-t] [file] |
用法示例:輸入exit或者ctrl-d組合來退出該shell
8.2.4 watch
預設情況下,watch命令會每秒執行一條命令並將其輸出顯示到螢幕上。與那些不能週期性顯示結果的效能工具一起工作時,watch就能發揮作用了。雖說watch的功能可以用shell指令碼代替,但是watch的使用更加簡單,並且幾乎哪裡都可以使用。
語法
watch [-d[=cumulative]] [-n sec] <command> |
watch命令列選項
-d [=cumulative] |
突出顯示樣本之間變化的輸出 |
-n sec |
更新等待的秒數 |
用法示例:watch會自動清屏的
8.2.5 ldd
ldd會列出對應的二進位制檔案所需的所有庫,以及系統中有哪些檔案能實現這些需求
8.2.6 objdump
對於分析二進位制檔案和庫的各個方面來說,objdump是一種複雜而強大的工具。儘管它有其他許多功能,它可以被用來確定給定的庫提供了那些函式。