全部課程
發(fā)布時(shí)間: 2017-06-16 15:20:17
騰科小編出于對(duì)Linux系統(tǒng)的興趣以及對(duì)底層知識(shí)的強(qiáng)烈欲望,因此整理了這篇文章。本文檔主要是結(jié)合Linux 大牛的一些經(jīng)驗(yàn)及Linux系統(tǒng)性能優(yōu)化相關(guān)文章整理后的一篇綜合性文章,主要是對(duì)涉及到的原理和性能測(cè)試的工具展開(kāi)說(shuō)明。當(dāng)然,小編本人所不知道的肯定比知道的要多的多,屆此也是希望大家能共同學(xué)習(xí)進(jìn)步。
性能分析工具
首先來(lái)看一張圖:
上圖是一次性能分析的分享,這里面的所有工具都可以通過(guò)man來(lái)獲得它的幫助文檔,下問(wèn)簡(jiǎn)單介紹介紹一下常規(guī)的用法:
vmstat–虛擬內(nèi)存統(tǒng)計(jì)
vmstat(VirtualMeomoryStatistics,虛擬內(nèi)存統(tǒng)計(jì)) 是Linux中監(jiān)控內(nèi)存的常用工具,可對(duì)操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU等的整體情況進(jìn)行監(jiān)視。
vmstat的常規(guī)用法:vmstat interval times即每隔interval秒采樣一次,共采樣times次,如果省略times,則一直采集數(shù)據(jù),直到用戶手動(dòng)停止為止。
簡(jiǎn)單舉個(gè)例子:
可以使用Ctrl+C停止vmstat采集數(shù)據(jù)。第一行顯示了系統(tǒng)自啟動(dòng)以來(lái)的平均值,第二行開(kāi)始顯示現(xiàn)在正在發(fā)生的情況,接下來(lái)的行會(huì)顯示每五秒間隔發(fā)生了什么,每一列的含義在頭部,如下所示:
內(nèi)存不足的表現(xiàn):free memory急劇減少,回收buffer和cacher也無(wú)濟(jì)于事,大量使用交換分區(qū)(swpd),頁(yè)面交換(swap)頻繁,讀寫(xiě)磁盤(pán)數(shù)量(io)增多,缺頁(yè)中斷(in)增多,上下文切換(cs)次數(shù)增多,等待IO的進(jìn)程數(shù)(b)增多,大量CPU時(shí)間用于等待IO(wa)。
iostat–用于報(bào)告中央處理器統(tǒng)計(jì)信息
iostat用于報(bào)告中央處理器(CPU)統(tǒng)計(jì)信息和整個(gè)系統(tǒng)、適配器、tty 設(shè)備、磁盤(pán)和 CD-ROM 的輸入/輸出統(tǒng)計(jì)信息,默認(rèn)顯示了與vmstat相同的cpu使用信息,使用以下命令顯示擴(kuò)展的設(shè)備統(tǒng)計(jì):
第一行顯示的是自系統(tǒng)啟動(dòng)以來(lái)的平均值,然后顯示增量的平均值,每個(gè)設(shè)備一行。常見(jiàn)Linux的磁盤(pán)IO指標(biāo)的縮寫(xiě)習(xí)慣,rq是request;r是read;w是write;qu是queue;sz是size;a是verage;tm是time;svc是service。
dstat–系統(tǒng)監(jiān)控工具
dstat顯示了cpu使用情況,磁盤(pán)io情況,網(wǎng)絡(luò)發(fā)包情況和換頁(yè)情況,輸出是彩色的,可讀性較強(qiáng),相對(duì)于vmstat和iostat的輸入更加詳細(xì)且較為直觀。在使用時(shí),直接輸入命令即可,當(dāng)然也可以使用特定參數(shù)。
如下:dstat –cdlmnpsy
iotop–LINUX進(jìn)程實(shí)時(shí)監(jiān)控工具
iotop命令是專門(mén)顯示硬盤(pán)IO的命令,界面風(fēng)格類(lèi)似top命令,可以顯示IO負(fù)載具體是由哪個(gè)進(jìn)程產(chǎn)生的。是一個(gè)用來(lái)監(jiān)視磁盤(pán)I/O使用狀況的top類(lèi)工具,具有與top相似的UI,其中包括PID、用戶、I/O、進(jìn)程等相關(guān)信息。
可以以非交互的方式使用:iotop –bod interval,查看每個(gè)進(jìn)程的I/O,可以使用pidstat,pidstat –d instat。
pidstat–監(jiān)控系統(tǒng)資源情況
pidstat主要用于監(jiān)控全部或指定進(jìn)程占用系統(tǒng)資源的情況,如CPU,內(nèi)存、設(shè)備IO、任務(wù)切換、線程等。
使用方法:pidstat –d interval;pidstat還可以用以統(tǒng)計(jì)CPU使用信息:pidstat –u interval;統(tǒng)計(jì)內(nèi)存信息:Pidstat –r interval。
top
top命令的匯總區(qū)域顯示了五個(gè)方面的系統(tǒng)性能信息:
任務(wù)區(qū)域默認(rèn)顯示:進(jìn)程ID,有效用戶,進(jìn)程優(yōu)先級(jí),NICE值,進(jìn)程使用的虛擬內(nèi)存,物理內(nèi)存和共享內(nèi)存,進(jìn)程狀態(tài),CPU占用率,內(nèi)存占用率,累計(jì)CPU時(shí)間,進(jìn)程命令行信息。
htop
htop 是Linux系統(tǒng)中的一個(gè)互動(dòng)的進(jìn)程查看器,一個(gè)文本模式的應(yīng)用程序(在控制臺(tái)或者X終端中),需要ncurses。
Htop可讓用戶交互式操作,支持顏色主題,可橫向或縱向滾動(dòng)瀏覽進(jìn)程列表,并支持鼠標(biāo)操作。與top相比,htop有如下優(yōu)點(diǎn):
mpstat
mpstat 是Multiprocessor Statistics的縮寫(xiě),是實(shí)時(shí)系統(tǒng)監(jiān)控工具。其報(bào)告與CPU的一些統(tǒng)計(jì)信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。常見(jiàn)用法:mpstat –P ALL interval times。
netstat
Netstat用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況。
常見(jiàn)用法:
ps–顯示當(dāng)前進(jìn)程的狀態(tài)
ps參數(shù)太多,具體使用方法可以參考man ps,常用的方法:ps aux #hsserver;ps –ef |grep #hundsun
strace
跟蹤程序執(zhí)行過(guò)程中產(chǎn)生的系統(tǒng)調(diào)用及接收到的信號(hào),幫助分析程序或命令執(zhí)行中遇到的異常情況。例如,查看mysqld在linux上加載哪種配置文件,可以通過(guò)運(yùn)行下面的命令:strace –e stat64 mysqld –print –defaults > /dev/null
uptime
能夠打印系統(tǒng)總共運(yùn)行了多長(zhǎng)時(shí)間和系統(tǒng)的平均負(fù)載,uptime命令最后輸出的三個(gè)數(shù)字的含義分別是一分鐘,五分鐘,十五分鐘內(nèi)系統(tǒng)的平均負(fù)荷。
lsof
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開(kāi)文件的工具。通過(guò)lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)檢測(cè)及排錯(cuò),常見(jiàn)的用法:
perf
perf是Linux kernel自帶的系統(tǒng)性能優(yōu)化工具。優(yōu)勢(shì)在于與Linux Kernel的緊密結(jié)合,它可以最先應(yīng)用到加入Kernel的new feature,用于查看熱點(diǎn)函數(shù),查看cashe miss的比率,從而幫助開(kāi)發(fā)者來(lái)優(yōu)化程序性能。性能調(diào)優(yōu)工具如 perf,Oprofile 等的基本原理都是對(duì)被監(jiān)測(cè)對(duì)象進(jìn)行采樣,最簡(jiǎn)單的情形是根據(jù) tick 中斷進(jìn)行采樣,即在 tick 中斷內(nèi)觸發(fā)采樣點(diǎn),在采樣點(diǎn)里判斷程序當(dāng)時(shí)的上下文。假如一個(gè)程序 90% 的時(shí)間都花費(fèi)在函數(shù) foo() 上,那么 90% 的采樣點(diǎn)都應(yīng)該落在函數(shù) foo() 的上下文中。運(yùn)氣不可捉摸,但我想只要采樣頻率足夠高,采樣時(shí)間足夠長(zhǎng),那么以上推論就比較可靠。因此,通過(guò) tick 觸發(fā)采樣,我們便可以了解程序中哪些地方最耗時(shí)間,從而重點(diǎn)分析。
常用的性能測(cè)試工具
熟練并精通了第二部分的性能分析命令工具,引入幾個(gè)性能測(cè)試的工具,介紹之前先簡(jiǎn)單了解幾個(gè)性能測(cè)試工具:
perf_events: 一款隨 Linux 內(nèi)核代碼一同發(fā)布和維護(hù)的性能診斷工具,由內(nèi)核社區(qū)維護(hù)和發(fā)展。Perf 不僅可以用于應(yīng)用程序的性能統(tǒng)計(jì)分析,也可以應(yīng)用于內(nèi)核代碼的性能統(tǒng)計(jì)和分析。
eBPF tools: 一款使用bcc進(jìn)行的性能追蹤的工具,eBPF map可以使用定制的eBPF程序被廣泛應(yīng)用于內(nèi)核調(diào)優(yōu)方面,也可以讀取用戶級(jí)的異步代碼。重要的是這個(gè)外部的數(shù)據(jù)可以在用戶空間管理。這個(gè)k-v格式的map數(shù)據(jù)體是通過(guò)在用戶空間調(diào)用bpf系統(tǒng)調(diào)用創(chuàng)建、添加、刪除等操作管理的。
perf-tools: 一款基于 perf_events (perf) 和 ftrace 的Linux性能分析調(diào)優(yōu)工具集。Perf-Tools 依賴庫(kù)少,使用簡(jiǎn)單。支持Linux 3.2 及以上內(nèi)核版本。
bcc(BPF Compiler Collection): 一款使用eBPF的perf性能分析工具。一個(gè)用于創(chuàng)建高效的內(nèi)核跟蹤和操作程序的工具包,包括幾個(gè)有用的工具和示例。利用擴(kuò)展的BPF(伯克利數(shù)據(jù)包過(guò)濾器),正式稱為eBPF,一個(gè)新的功能,首先被添加到Linux 3.15。多用途需要Linux 4.1以上BCC。
ktap: 一種新型的linux腳本動(dòng)態(tài)性能跟蹤工具。允許用戶跟蹤Linux內(nèi)核動(dòng)態(tài)。ktap是設(shè)計(jì)給具有互操作性,允許用戶調(diào)整操作的見(jiàn)解,排除故障和延長(zhǎng)內(nèi)核和應(yīng)用程序。它類(lèi)似于Linux和Solaris DTrace SystemTap。
Flame Graphs:是一款使用perf,system tap,ktap可視化的圖形軟件,允許最頻繁的代碼路徑快速準(zhǔn)確地識(shí)別,可以是使用github.com/brendangregg/flamegraph中的開(kāi)發(fā)源代碼的程序生成。
一、 Linux observability tools | Linux 性能觀測(cè)工具
二、Linux benchmarking tools | Linux 性能測(cè)評(píng)工具
三、Linux tuning tools | Linux 性能調(diào)優(yōu)工具
四、Linux observability sar | linux性能觀測(cè)工具
sar(System Activity Reporter系統(tǒng)活動(dòng)情況報(bào)告)是目前Linux上最為全面的系統(tǒng)性能分析工具之一,可以從多方面對(duì)系統(tǒng)的活動(dòng)進(jìn)行報(bào)告,包括文件的讀寫(xiě)情況、系統(tǒng)調(diào)用的使用情況、磁盤(pán)I/O、CPU效率、內(nèi)存使用狀況、進(jìn)程活動(dòng)及IPC有關(guān)的活動(dòng)等方面。