你是否也曾跟我一樣,看了很多書抚恒、學(xué)了很多 Linux 性能工具咱台,但在面對 Linux 性能問題時,還是束手無策俭驮?實際上回溺,性能分析和優(yōu)化始終是大多數(shù)軟件工程師的一個痛點春贸。但是,面對難題遗遵,我們真的就無解了嗎萍恕?
固然,性能問題的復(fù)雜性增加了學(xué)習(xí)難度车要,但這并不能成為我們進階路上的“攔路虎”允粤。在我看來,大多數(shù)人對性能問題“投降”翼岁,原因可能只有兩個类垫。
一個是你沒找到有效的方法學(xué)原理,一聽到“系統(tǒng)”琅坡、“底層”這些詞就發(fā)怵悉患,覺得東西太難自己一定學(xué)不會,自然也就無法深入學(xué)下去榆俺,從而不能建立起性能的全局觀售躁。
再一個就是你看到性能問題的根源太復(fù)雜,既不懂怎么去分析谴仙,也不能抽絲剝繭找到瓶頸迂求。
你可能會想,反正程序出了問題晃跺,上網(wǎng)查就是了揩局,用別人的方法,囫圇吞棗地多試幾次掀虎,有可能就解決了凌盯。于是,你懶得深究這些方法為啥有效烹玉,更不知道為什么驰怎,很多方法在別人的環(huán)境有效,到你這兒就不行了二打。
所以县忌,相同的錯誤重復(fù)在犯,相同的狀況也是重復(fù)出現(xiàn)继效。
其實症杏,性能問題并沒有你想像得那么難,只要你理解了應(yīng)用程序和系統(tǒng)的少數(shù)幾個基本原理瑞信,再進行大量的實戰(zhàn)練習(xí)厉颤,建立起整體性能的全局觀,大多數(shù)性能問題的優(yōu)化就會水到渠成凡简。
我見過很多工程師逼友,在分析應(yīng)用程序所使用的第三方組件的性能時精肃,并不熟悉這些組件所用的編程語言,卻依然可以分析出線上問題的根源帜乞,并能通過一些方法進行優(yōu)化司抱,比如修改應(yīng)用程序?qū)λ鼈兊恼{(diào)用邏輯,或者調(diào)整組件的配置選項等挖函。
還是那句話状植,你不需要了解每個組件的所有實現(xiàn)細節(jié),只要能理解它們最基本的工作原理和協(xié)作方式怨喘,你也可以做到津畸。
性能指標(biāo)是什么?
學(xué)習(xí)性能優(yōu)化的第一步必怜,一定是了解“性能指標(biāo)”這個概念肉拓。
當(dāng)看到性能指標(biāo)時,你會首先想到什么呢梳庆?我相信“高并發(fā)”和“響應(yīng)快”一定是最先出現(xiàn)在你腦海里的兩個詞暖途,而它們也正對應(yīng)著性能優(yōu)化的兩個核心指標(biāo)——“吞吐”和“延時”。這兩個指標(biāo)是從應(yīng)用負載的視角來考察性能膏执,直接影響了產(chǎn)品終端的用戶體驗驻售。跟它們對應(yīng)的,是從系統(tǒng)資源的視角出發(fā)的指標(biāo)更米,比如資源使用率欺栗、飽和度等。
我們知道征峦,隨著應(yīng)用負載的增加迟几,系統(tǒng)資源的使用也會升高,甚至達到極限栏笆。而性能問題的本質(zhì)类腮,就是系統(tǒng)資源已經(jīng)達到瓶頸,但請求的處理卻還不夠快蛉加,無法支撐更多的請求蚜枢。
性能分析,其實就是找出應(yīng)用或系統(tǒng)的瓶頸针饥,并設(shè)法去避免或者緩解它們祟偷,從而更高效地利用系統(tǒng)資源處理更多的請求。這包含了一系列的步驟打厘,比如下面這六個步驟。
選擇指標(biāo)評估應(yīng)用程序和系統(tǒng)的性能贺辰;
為應(yīng)用程序和系統(tǒng)設(shè)置性能目標(biāo)户盯;
進行性能基準測試嵌施;
性能分析定位瓶頸;
優(yōu)化系統(tǒng)和應(yīng)用程序莽鸭;
性能監(jiān)控和告警吗伤。
了解了這些性能相關(guān)的基本指標(biāo)和核心步驟后,該怎么學(xué)呢硫眨?接下來足淆,我來說說要學(xué)好 Linux 性能優(yōu)化的幾個重要問題。
學(xué)這個專欄需要什么基礎(chǔ)
首先你要明白礁阁,我們這個專欄的核心是性能的分析和優(yōu)化巧号,而不是最基本的 Linux 操作系統(tǒng)的使用方法。
因而姥闭,我希望你最好用過 Ubuntu 或其他 Linux 操作系統(tǒng)丹鸿,然后要具備一些編程基礎(chǔ),比如
了解 Linux 常用命令的使用方法棚品;
知道怎么安裝和管理軟件包靠欢;
知道怎么通過編程語言開發(fā)應(yīng)用程序等。
這樣铜跑,在我講性能時门怪,你就更容易理解性能背后的原理,特別是在結(jié)合專欄里的案例實踐后锅纺,對性能分析能有更直觀的體會掷空。
這個專欄不會像教科書那樣,詳細教你操作系統(tǒng)伞广、算法原理拣帽、網(wǎng)絡(luò)協(xié)議乃至各種編程語言的全部細節(jié),但一些重要的系統(tǒng)原理還是必不可少的嚼锄。我還會用實際案例一步步教你减拭,貫穿從應(yīng)用程序到操作系統(tǒng)的各個組件。
學(xué)習(xí)的重點是什么区丑?
想要學(xué)習(xí)好性能分析和優(yōu)化拧粪,建立整體系統(tǒng)性能的全局觀是最核心的話題。因而沧侥,
理解最基本的幾個系統(tǒng)知識原理可霎;
掌握必要的性能工具;
通過實際的場景演練宴杀,貫穿不同的組件癣朗。
這三點,就是我們學(xué)習(xí)的重中之重旺罢。我會在專欄的每篇文章中旷余,針對不同場景绢记,把這三個方面給你講清楚,你也一定要花時間和心思來消化它們正卧。
其實說到性能工具蠢熄,就不得不提性能領(lǐng)域的大師布倫丹·格雷格(Brendan Gregg)。他不僅是動態(tài)追蹤工具 DTrace 的作者炉旷,還開發(fā)了許許多多的性能工具签孔。我相信你一定見過他所描繪的 Linux 性能工具圖譜:
這個圖是 Linux 性能分析最重要的參考資料之一,它告訴你窘行,在 Linux 不同子系統(tǒng)出現(xiàn)性能問題后饥追,應(yīng)該用什么樣的工具來觀測和分析。
比如抽高,當(dāng)遇到 I/O 性能問題時判耕,可以參考圖片最下方的 I/O 子系統(tǒng),使用 iostat翘骂、iotop壁熄、blktrace 等工具分析磁盤 I/O 的瓶頸。你可以把這個圖保存下來碳竟,在需要的時候參考查詢草丧。
另外,我還要特別強調(diào)一點莹桅,就是性能工具的選用昌执。有句話是這么說的,一個正確的選擇勝過千百次的努力诈泼。雖然夸張了些懂拾,但是選用合適的性能工具,確實可以大大簡化整個性能優(yōu)化過程铐达。在什么場景選用什么樣的工具岖赋、以及怎么學(xué)會選擇合適工具,都是我想教給你的東西瓮孙。
但是切記唐断,千萬不要把性能工具當(dāng)成學(xué)習(xí)的全部。工具只是解決問題的手段杭抠,關(guān)鍵在于你的用法脸甘。只有真正理解了它們背后的原理,并且結(jié)合具體場景偏灿,融會貫通系統(tǒng)的不同組件丹诀,你才能真正掌握它們。
最后,為了讓你對性能有個全面的認識忿墅,我畫了一張思維導(dǎo)圖扁藕,里面涵蓋了大部分性能分析和優(yōu)化都會包含的知識,專欄中也基本都會講到疚脐。你可以保存或者打印下來,每學(xué)會一部分就標(biāo)記出來邢疙,記錄并把握自己的學(xué)習(xí)進度棍弄。
鏈接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g提取碼:x2p5
免費分享,但是X度限制嚴重疟游,如若鏈接失效點擊鏈接或搜索加群 群號936682608呼畸。
怎么學(xué)更高效?
前面我給你講了 Linux 性能優(yōu)化的學(xué)習(xí)重點颁虐,接下來我再跟你分享一下蛮原,我的幾個學(xué)習(xí)技巧。掌握這些技巧另绩,可以讓你學(xué)得更輕松儒陨。
技巧一:雖然系統(tǒng)的原理很重要,但在剛開始一定不要試圖抓住所有的實現(xiàn)細節(jié)笋籽。
深陷到系統(tǒng)實現(xiàn)的內(nèi)部蹦漠,可能會讓你丟掉學(xué)習(xí)的重點,而且繁雜的實現(xiàn)邏輯车海,很可能會打退你學(xué)習(xí)的積極性笛园。所以,我個人觀點是一定要適度侍芝。
你可以先學(xué)會我給你講的這些系統(tǒng)工作原理研铆,但不要去深究 Linux 內(nèi)核是如何做到的,而是要把你的重點放到如何觀察和運用這些原理上州叠,比如:
有哪些指標(biāo)可以衡量性能棵红?
使用什么樣的性能工具來觀察指標(biāo)?
導(dǎo)致這些指標(biāo)變化的因素等留量。
技巧二:邊學(xué)邊實踐窄赋,通過大量的案例演習(xí)掌握 Linux 性能的分析和優(yōu)化。
只有通過在機器上練習(xí)楼熄,把我講的知識和案例自己過一遍忆绰,這些東西才能轉(zhuǎn)化成你的。我精心設(shè)計這些案例可岂,正是為了讓你有更好的學(xué)習(xí)理解和操作體驗错敢。
所以我強烈推薦你去實際運行、分析這些案例,或者用學(xué)到的知識去分析你自己的系統(tǒng)稚茅,這樣你會有更直觀的感受纸淮,獲得更好的學(xué)習(xí)效果。
技巧三:勤思考亚享,多反思咽块,善總結(jié),多問為什么欺税。
想真正學(xué)懂一門知識侈沪,最好的方法就是問問題。當(dāng)你能提出好的問題時晚凿,就說明你已經(jīng)深入了解了它亭罪。
你可以隨時在留言區(qū)給我留言,寫下自己的疑問歼秽、思考和總結(jié)应役,和我還有其他的學(xué)習(xí)者一起討論切磋。你也可以寫下自己經(jīng)歷過的性能問題燥筷,記錄你的分析步驟和優(yōu)化思路箩祥,我們一起互動探討。學(xué)習(xí)之前荆责,你的準備作為一個包含大量案例實踐的課程滥比,我會在每篇文章中,使用一到兩臺
Ubuntu 18.04 虛擬機做院,作為案例運行和分析的環(huán)境盲泛。如果你只是單純聽音頻的講解,卻從不動手實踐键耕,學(xué)習(xí)的效果一定會大打折扣寺滚。
所以,你是不是可以準備好一臺 Linux 機器屈雄,用于課程案例的實踐呢村视?任意的虛擬機或物理機都可以,并不局限于 Ubuntu 系統(tǒng)酒奶。