自編教材分享:第三章—程序性能的分析和測量(二)



本期分享程序性能測量的工具:計(jì)算器類工具和跟蹤類工具。
計(jì)算器類工具:
虛擬內(nèi)存統(tǒng)計(jì)工具vmstat
Vmstat命令顯示Linux系統(tǒng)虛擬內(nèi)存狀態(tài),還可以統(tǒng)計(jì)關(guān)于進(jìn)程 、內(nèi)存、處理器使用率、I/O、對swap空間的I/O等系統(tǒng)整體運(yùn)行狀態(tài)。
使用方法
Vmstat命令常用格式及使用方法為:
Vmstat命令每隔interval秒采樣一次,一共采樣times次,如果省略了times,則vmstat命令會(huì)一直采集數(shù)據(jù),直到用戶手動(dòng)停止,或使用ctrl+c進(jìn)行停止。具體選項(xiàng)可以使用man vmstat命令來查看。
簡單示例:
這個(gè)命令表示每隔2秒執(zhí)行一次vmstat,一共執(zhí)行10次。參數(shù)含義為,r:等待運(yùn)行的進(jìn)程數(shù)目;b:處在非中斷睡眠狀態(tài)的進(jìn)程數(shù);swpd:虛擬內(nèi)存的使用情況;free:空閑的物理內(nèi)存的大小;si:從磁盤交換到swap虛擬內(nèi)存的交換頁數(shù)量;so:從swap虛擬內(nèi)存交換到磁盤的交換頁數(shù)量;in:每秒的中斷數(shù);us:用戶CPU使用時(shí)間。

輸出字段一共分為6大部分:procs、memory、swap、io、system和cpu。如果r(等待運(yùn)行的進(jìn)程數(shù)目)經(jīng)常大于4,id(空閑的CPU的時(shí)間)經(jīng)常少于40,表示處理器的負(fù)荷很重。并且r的數(shù)目越多,表示處理器越繁忙。如果bi、bo長期不等于0,表示內(nèi)存不足。

輸入/輸出統(tǒng)計(jì)工具iostat
Iostat命令是對系統(tǒng)的磁盤操作活動(dòng)進(jìn)行監(jiān)視的一個(gè)工具。它的特點(diǎn)是匯報(bào)磁盤活動(dòng)統(tǒng)計(jì)情況,同時(shí)也會(huì)匯報(bào)處理器使用情況。
使用方法
Iostat命令常用格式及使用方法為:
Options 表示操作項(xiàng)參數(shù),interval指定統(tǒng)計(jì)時(shí)間間隔,count表示總共輸出次數(shù),具體的參數(shù)可以使用iostat -help來查看,參數(shù)的意義可以使用man iostat來查看。
簡單示例:
-d 2 3表示每隔2秒,顯示一次設(shè)備統(tǒng)計(jì)信息,總共輸出3次。參數(shù)含義為,Device:設(shè)備名稱;tps:每秒I/O數(shù),即IOPS,磁盤連續(xù)讀和連續(xù)寫之和;kB_read/s:每秒從磁盤讀取數(shù)據(jù)大小,單位為KB/s;kB_wrtn/s:每秒寫入磁盤的數(shù)據(jù)的大小,單位為KB/s;kB_read:從磁盤讀出的數(shù)據(jù)總數(shù),單位為KB;kB_wrtn:寫入磁盤的的數(shù)據(jù)總數(shù),單位為KB。

實(shí)時(shí)狀態(tài)工具top
Top命令顯示系統(tǒng)當(dāng)前的進(jìn)程以及其它的一些信息,是一個(gè)動(dòng)態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當(dāng)前狀態(tài)。Top命令提供了對系統(tǒng)處理器的實(shí)時(shí)狀態(tài)監(jiān)視,它將顯示系統(tǒng)中使用處理器最密集的任務(wù)列表。該命令可以按內(nèi)存使用和執(zhí)行時(shí)間對任務(wù)進(jìn)行排序。
使用方法
Top命令常用格式及使用方法為:
Top命令顯示了系統(tǒng)平均負(fù)載、任務(wù)信息、處理器狀態(tài)、內(nèi)存信息、進(jìn)程或任務(wù)的狀態(tài)。Top命令輸出中的第一行是系統(tǒng)的平均負(fù)載、系統(tǒng)當(dāng)前時(shí)間、系統(tǒng)已運(yùn)行時(shí)間、當(dāng)前連接系統(tǒng)的終端數(shù)、系統(tǒng)負(fù)載;第二行是總進(jìn)程數(shù)、正在運(yùn)行的進(jìn)程數(shù)、正在睡眠的進(jìn)程數(shù)、停止的進(jìn)程數(shù)、僵死狀態(tài)的進(jìn)程數(shù);第三行是用戶進(jìn)程運(yùn)行、內(nèi)核、用戶調(diào)整優(yōu)先級、空閑率;第四行是物理內(nèi)存總量、空閑內(nèi)存總量、使用的物理內(nèi)存總量、用作內(nèi)核緩沖/緩存的內(nèi)存量;第五行可用于進(jìn)程下一次分配的物理內(nèi)存數(shù)量、PR內(nèi)核優(yōu)先級、NI用戶視角下的進(jìn)程執(zhí)行優(yōu)先級、虛擬內(nèi)存大小,進(jìn)程使用的未被換出的物理內(nèi)存大小、進(jìn)程使用的共享內(nèi)存大小,進(jìn)程當(dāng)前的狀態(tài)等。

當(dāng)前進(jìn)程信息統(tǒng)計(jì)工具ps
Ps命令是最簡易操作又非常強(qiáng)大的進(jìn)程查看命令,使用該命令可以確定有哪些進(jìn)程正在運(yùn)行以及運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等。
使用方法
Ps命令常用格式及使用方法為:
Ps命令最常用的選項(xiàng)就是e、f、a、u。相應(yīng)的選項(xiàng)組合為ps -aux,ps -ef等,可以通過這些組合準(zhǔn)確定位系統(tǒng)進(jìn)程狀態(tài)。
簡單示例:

跟蹤類工具
程序調(diào)試工具gdb
gdb是GNU開源組織發(fā)布的一款功能強(qiáng)大的UNIX/Linux下的程序調(diào)試工具,主要功能就是監(jiān)控程序的執(zhí)行。gdb的主要功能就是監(jiān)控程序的執(zhí)行。當(dāng)源程序文件編譯為可執(zhí)行文件并執(zhí)行時(shí),并且該文件中必須包含必要的調(diào)試信息,gdb才會(huì)派上用場。所以在編譯時(shí)需要使用-g選項(xiàng)編譯源文件,才可生成滿足gdb要求的可執(zhí)行文件。
一般來說,gdb主要完成以下四個(gè)方面的功能:
啟動(dòng)程序,可以按照自定義的要求隨心所欲的運(yùn)行程序。
可讓被調(diào)試的程序在所設(shè)置的指定斷點(diǎn)處停住。
當(dāng)程序被停住時(shí),可以檢查此時(shí)程序中所發(fā)生的事件。
動(dòng)態(tài)的改變程序的執(zhí)行環(huán)境。
使用方法
簡單示例:

b3表示調(diào)試的代碼第三行設(shè)置為斷點(diǎn),r或run表示執(zhí)行程序,whatis iNum表示查看iNum的數(shù)據(jù)類型,c表示繼續(xù)執(zhí)行程序,-n一步步執(zhí)行程序,其中p iNum表示輸出變量iNum的值。
堆棧統(tǒng)計(jì)信息工具pstack
pstack工具可對指定進(jìn)程號的進(jìn)程輸出函數(shù)調(diào)用棧,對于排查進(jìn)程問題時(shí)非常有用。比如發(fā)現(xiàn)一個(gè)服務(wù)一直處于工作狀態(tài),如假死狀態(tài),使用這個(gè)命令就能輕松定位問題所在。
使用方法
Pstack命令常用格式及使用方法為:
Pstack命令可以和ps命令一起使用,首先使用ps命令來查看要檢查程序的進(jìn)程號pid。再使用pstack工具加上進(jìn)程號打印出它的堆棧信息,查看線程的詳細(xì)函數(shù)棧信息。它的函數(shù)是從下到上的調(diào)用關(guān)系。

跟蹤系統(tǒng)調(diào)用工具strace
Strace是一種相當(dāng)有效的跟蹤工具,它的主要特點(diǎn)是可以用來監(jiān)視系統(tǒng)調(diào)用。
Strace工具有兩種運(yùn)行模式:
通過它啟動(dòng)要跟蹤的進(jìn)程。用法很簡單,在原本的命令前加上strace即可。例如,要跟蹤“l(fā)s -al”這個(gè)命令的執(zhí)行,只需要輸入指令strace ls -al即可。
另外一種運(yùn)行模式是跟蹤已經(jīng)在運(yùn)行的進(jìn)程,在不中斷進(jìn)程執(zhí)行的情況下,了解程序的運(yùn)行過程。此時(shí),只需要給strace傳遞一個(gè)-p pid選項(xiàng)即可。
需要跟蹤程序add.out的運(yùn)行過程,則輸入命令
了解正在運(yùn)行的進(jìn)程號為2403的進(jìn)程情況,只需要輸入命令
