




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在運(yùn)行階段,C++靜態(tài)程序變成了動(dòng)態(tài)進(jìn)程,是一個(gè)實(shí)時(shí)、復(fù)雜的狀態(tài)機(jī),由CPU全程掌控。但因?yàn)镃PU的速度實(shí)在太快,程序的狀態(tài)又實(shí)在太多,所以前幾個(gè)階段的思路、方法(Test)和性能分析(PerformanceProfiling)調(diào)試你一定很熟悉了,常用的工具是GDB,我面的“輕松話題”里也講過一點(diǎn)的使用技巧。它的關(guān)鍵是讓高速的CPU慢下來,把它降速到和人類大腦一樣的程度,于是,我們就可以跟得上CPU的節(jié)奏,理清楚程序的動(dòng)態(tài)流程。發(fā)現(xiàn)Bug,調(diào)試去解決Bug,再返回給測(cè)試驗(yàn)證。好的測(cè)試對(duì)于軟件的成功至關(guān)重要,有你可以把它跟CodeRevew對(duì)比一下。CodeReview是一種靜態(tài)的程序分析方法,在編碼階段通過觀察源碼來優(yōu)化程序、找出隱藏的Bg在運(yùn)段序的信息整合究,軟件,一步優(yōu)化性能提供依據(jù),指明方向。從這個(gè)粗略的定義里,你可以看到,性能分析的關(guān)鍵就是“測(cè)量性能分析的范圍非常廣,可以從CPU利用率、內(nèi)存占用率、網(wǎng)絡(luò)吞吐量、系統(tǒng)延遲等許多今天,我只講多數(shù)時(shí)候最看重的CPU性能分析。因?yàn)镃PU利用率通常是評(píng)價(jià)程序運(yùn)行的好也大多與CPU其實(shí),Linux系統(tǒng)自己就內(nèi)置了很多用于性能分析的工具,比如top、sar、vmstat、netstat,等等。但是,Linux比”的工具:top、pstack、straceperf。它們用起來很簡(jiǎn)單,而且實(shí)用性很強(qiáng),可以toptopCPU、內(nèi)存等幾個(gè)最關(guān)鍵的性能指標(biāo)。top一個(gè)是按“M”,看內(nèi)存占用(RES/MEM),另一個(gè)是按“P”CPU另外,你也可以按組合鍵“xb”我曾經(jīng)做過一個(gè)“魔改”Nginxtop從topCP現(xiàn)某個(gè)指標(biāo)超出了預(yù)期,就說明可能存在問題,接下來,你就應(yīng)該采取更具體的措施去進(jìn)一比如說,這里面的一個(gè)進(jìn)程CPU使用率太高,我懷疑有問題,要深入進(jìn)程內(nèi)部,看看到底是哪些操作消耗了CPU。這時(shí),我們可以選用兩個(gè)工具:pstack和stracepstack可以打印出進(jìn)程的調(diào)用棧信息,有點(diǎn)像是給正在運(yùn)行的進(jìn)程拍了個(gè)快照,你能看到ZMQ不過,pstackstrace把pstack和strace結(jié)合起來,你大概就可以知道,進(jìn)程在用戶空間和內(nèi)核空間都干了些什么。當(dāng)進(jìn)程的CPU利用率過高或者過低的時(shí)候,我們有很大概率能直接發(fā)現(xiàn)瓶頸所在。perfperfpstackstrace續(xù)執(zhí)行多次的pstack,然后再統(tǒng)計(jì)函數(shù)的調(diào)用次數(shù),算出百分比。只要采樣的頻率足夠出CPU使用情況。我常用的perf命令是“perftop-K-pxxx”,按CPU使用率排序,只看用戶空間的調(diào)用,這樣很容易就能找出最耗費(fèi)CPU的函數(shù)。比如,下面這張圖顯示的是大部分CPU時(shí)間都消耗在了ZMQ庫(kù)上,其中,內(nèi)存拷貝調(diào)用居然達(dá)到了近30%,是不折不扣的“大戶”。所以,只要能把這些拷貝操作減少一點(diǎn),就總之,使用perf通??梢钥焖俚钠款i,幫助你找準(zhǔn)性能優(yōu)化的方向。課下你也可以自己嘗試多分析各種進(jìn)程,比如Redis、MySQL,等等,觀察它們都在干什么。top、pstack、strace和perf屬于“非侵入”式的分析工具,不需要修改源碼,就可以在在這里,我要推薦一個(gè)專業(yè)的源碼級(jí)性能分析工具:Performanceolsgptools。它是一個(gè)C++工具集,里面包含了幾個(gè)專門的性能分析工具(tc),分析效果直觀、友好、易理解,被廣泛地應(yīng)用于很多系統(tǒng),經(jīng)過了充分的實(shí)際驗(yàn)證。代代apt-get apt-getinstall gperftools的性能分析工具有CPUProfiler和HeapProfiler兩種,用來分析CPU和內(nèi)new/delete,就完全可以不用關(guān)心HeapProfiler。CPUProfilerperf100(100Hz),也就是每10毫秒采樣一次程序的函數(shù)調(diào)用情況。shared_ptrvoid*可以在智能指針析構(gòu)的時(shí)候執(zhí)行任意代碼(簡(jiǎn)單的RAII慣用法):代代automake_cpu_profiler[](conststring&//lambda//33456789{ std::shared_ptr<void>(null}代代123456789autocp=autostr=//for(inti=0;i<1000;i++)//auto=make_regex(R"(^(\w+)\:(\w+)$)");autowhat=assert(regex_match(str,what,//}forgperftools編譯運(yùn)行后會(huì)得到一個(gè)“case1.perfgperftools二進(jìn)制的,不能直接查看,如果想要獲得可讀的信息,還需要另外一個(gè)工具pprof。但是,pprof并不含在apt-get的安裝包里,所以,你還要從 上源碼,代代12345gitpprof--text./a.outcase1.perf>Total:7264474484493435std::22 26 2322pprofperf代代12apt-getinstallgit--sv”“--clped代代12345pprof--svg./a.outcase1.perf>pprof--collapsed./a.outcase1.perf>case1.cbtflamegraph.plcase1.cbt>flame.svgflamegraph.pl--invert--coloraquacase1.cbt>我就拿最方便的火焰圖來“看圖說話”吧。你也可以 上找到原圖由于C++有名字空間、類、模板等特性,函數(shù)的名字都很長(zhǎng),看起來有點(diǎn)費(fèi)勁,不過這樣也比純文本要直觀一些,可以很容易地看出,正則表達(dá)式占用了絕大部分的CPU時(shí)間。再仔細(xì)觀察的話,就會(huì)發(fā)現(xiàn),_Compiler()這個(gè)函數(shù)是真正的“罪魁禍?zhǔn)住薄4?23456auto=make_regex(R"(^(\w+)\:(\w+)$)");autowhat=for(inti=0;i<1000;{assert(regex_match(str,what,////再運(yùn)行程序,你會(huì)發(fā)現(xiàn)程序瞬間執(zhí)行完畢,而且因?yàn)閮?yōu)化效果太好,gperftools甚至都來基本的gperftools用法就這么多了,你可以再去看它的文檔了解的用法,比如使用環(huán)境變量和信號(hào)來控制啟停性能分析,或者tcmalloc庫(kù),優(yōu)化C++的內(nèi)存分goodenough),而調(diào)試和測(cè)試回答的是為什么系統(tǒng)“不好”(notgood)。最簡(jiǎn)單的性能分析工具是top,可以快速查看進(jìn)程的CPUpstack和straceperfCPUgperftools直性能分析與優(yōu)化是一門艱深的課題,也是一個(gè)廣泛的議題,CPU今天介紹的這些,是我挑選的對(duì)初學(xué)者最有用的內(nèi)容,學(xué)習(xí)難度不高,容易上手,見效快。希望你能以此為契機(jī),在今后的日子里多用、多實(shí)際操作,并且不斷去探索、應(yīng)用其他的分析工具,綜合運(yùn)用它們給程序,才能讓C++在運(yùn)行階段跑得更好更快更穩(wěn),才不辜負(fù)前面編碼、預(yù)處理和編譯階段的苦心與努力。 不得售賣。頁(yè)面已增加防盜追蹤,將依法其上一 17|語(yǔ)言:搭建高性能的混合系下一 輕松話題(一)|4本值得一讀再讀
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院顧問合同范本
- 勞務(wù)施工電梯合同范本
- 加工制造合同范本
- 協(xié)議單合同范本
- 北京裝修勞務(wù)合同范本
- 加盟串串香合同范本
- 住宅用地轉(zhuǎn)讓買賣合同范本
- 倉(cāng)庫(kù)維修協(xié)議合同范本
- 個(gè)人定制菜地合同范本
- 中介轉(zhuǎn)租店鋪合同范本
- 《我的家族史》課件
- 干部考察報(bào)告表()
- 《攝影圖片分析》課件
- 青少年社會(huì)支持評(píng)定量表
- kW直流充電樁的設(shè)計(jì)
- 施工圖總目錄
- 《裝配化工字組合梁鋼橋六車道3x30m通用圖》(3911-05-2021)【可編輯】
- 02S404給排水圖集標(biāo)準(zhǔn)
- 人民醫(yī)院診斷證明書
- 六年級(jí)勞動(dòng)與技術(shù)下冊(cè)《課程綱要》
- 掛牌督辦安全生產(chǎn)重大事故隱患銷號(hào)申請(qǐng)表
評(píng)論
0/150
提交評(píng)論