一個更細致的觀察方法就是通過內(nèi)核ftrace、perf-event來動態(tài)觀測Linux內(nèi)核 。比如記錄寫塊設備的起始和返回時間,這樣我們就可以知道磁盤寫是否有延時,也可以統(tǒng)計寫磁盤時間耗費分布 。有一個開源的工具包perf-tools里面包含著iolatency, iosnoop等工具 。
4.如何定位鎖的問題?
大家都知道鎖會引入額外開銷,但鎖的開銷到底有多大,估計很多人沒有實測過,我可以給一個數(shù)據(jù),一般單次加解鎖100 cycles,spinlock或者cas更快一點 。
使用鎖的時候,要注意鎖的粒度,但鎖的粒度也不是越小越好,太大會增加撞鎖的概率,太小會導致代碼更難寫 。
多線程場景下,如果cpu利用率上不去,而系統(tǒng)吞吐也上不去,那就有可能是鎖導致的性能下降,這個時候,可以觀察程序的sys cpu和usr cpu,這個時候通過perf如果發(fā)現(xiàn)lock的開銷大,那就沒錯了 。
如果程序卡住了,可以用pstack把堆棧打出來,定位死鎖的問題 。
5. 如何提?Cache利用率?
內(nèi)存/Cache問題是我們常見的負載瓶頸問題,通??衫胮erf等一些通用工具來輔助分析,優(yōu)化cache的思想可以從兩方面來著手,一個是增加局部數(shù)據(jù)/代碼的連續(xù)性,提升cacheline的利用率,減少cache miss,另一個是通過prefetch,降低miss帶來的開銷 。
通過對數(shù)據(jù)/代碼根據(jù)冷熱進行重排分區(qū),可提升cacheline的有效利用率,當然觸發(fā)false-sharing另當別論,這個需要根據(jù)運行trace進行深入調(diào)整了;說到prefetch,用過的人往往都有一種體會,現(xiàn)實效果比預期差的比較遠,確實無論是數(shù)據(jù)prefetch還是代碼prefetch,不確定性太大,指望編譯器更靠譜點 。
小結(jié)
性能優(yōu)化是一項細致的工作,工程師們曾致力于尋找一勞永逸解決性能問題的捷徑,但遺憾的是,沒有銀彈,但這并不意味著性能優(yōu)化無章可循 。軟件工程師們在性能優(yōu)化方面積累了大量的經(jīng)驗,包括架構(gòu)、緩存、預取、工具、編譯器與編程語言,代碼重構(gòu)等實踐經(jīng)驗方方面面,這些方法和探討都具有借鑒意義 。性能優(yōu)化也是一個系統(tǒng)性工程,出現(xiàn)性能瓶頸再優(yōu)化是一種先污染后治理的思路 。更好的方式是將性能貫穿于軟件的整個生命周期之中,在設計之初即把性能作為一項需求甚至關(guān)鍵目標加以考慮,開發(fā)中持續(xù)監(jiān)控性能的變化并嚴格遵從高性能編碼規(guī)范,后期維護將性能納入維護體系 。
嚴格的說,性能優(yōu)化和性能設計有所不同,性能優(yōu)化通常是在現(xiàn)有系統(tǒng)和代碼基礎上做改進,它并非推倒重來,考驗的是開發(fā)者反向修復的能力,而性能設計考驗的是設計者的正向設計能力,但性能優(yōu)化的方法可以指導性能設計,兩者互補 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- seo白帽和黑帽區(qū)別 seo白帽優(yōu)化技術(shù)
- vray常用材質(zhì)參數(shù)大全 vray玻璃材質(zhì)怎么調(diào)
- SEO重要的標簽 seo標簽怎么優(yōu)化
- 經(jīng)常用酵母蒸饅頭到底好不好 經(jīng)常用酵母蒸饅頭好嗎
- SEO關(guān)鍵詞排名優(yōu)化 有哪些網(wǎng)站可以推廣
- 常用Linux網(wǎng)絡命令匯總 linux打開網(wǎng)頁命令
- 酒店常用的滅火器有哪些呢
- 超詳細的 JS 數(shù)組方法 js的數(shù)組有哪些常用方法
- excel最常用的八個函數(shù) 函數(shù)的應用知識點
- 住酒店日常英語口語對話 酒店常用英語口語
