最近一直在忙著招人,發現那些來面試的候選者,代碼能力雖然不錯,但很多都卡在性能優化問題上。
其實,不論你是高級工程師,還是架構師,性能優化的問題都少不了。想徹底解決,就要全面了解程序設計、算法分析、編程語言、系統、存儲、網絡等知識,但能做到的人少之又少,比如:
流量高峰期,服務器 CPU 使用率過高報警,是系統 CPU 資源太少,還是程序并發寫得有問題?
系統沒有跑吃內存的程序,但敲完 free 命令后發現沒內存了,到底被什么占用了?
一大早收到 Zabbix 告警,發現某臺存放監控數據的數據庫主機 CPU 的 I/O Wait 較高,要怎么處理?
大多數時候,我們只能看到“癥狀”,卻不知從哪兒下手排查和解決。因為 Linux 性能優化是個系統工程,涉及從程序設計、算法分析、編程語言,再到系統、存儲、網絡等底層基礎設施的方方面面。每個組件都可能出問題,而且很有可能多個組件同時出問題。
所以,性能優化是軟件系統中最有挑戰的工作,非常考驗綜合能力。這么說吧,如果能把性能優化的各個關鍵點吃透,你已經是個非常厲害的軟件工程師了。
但話說回來,只要你了解少數幾個系統組件的基本原理和協作方式,掌握基本性能指標和工具,和常用的性能優化技巧,已經可以分析和優化大多數性能問題了。在這個基礎上,再去讀那些經典操作系統圖書,才能事半功倍。
我認為,學習要掌握正確的方法。對大多數人來說,最好的學習方式一定是帶著問題、有重點地學習。這里,分享給你一張Linux 性能優化圖譜,涵蓋了大部分性能問題,可以幫你建立對系統性能的全面認知。
這張圖譜出自倪朋飛,他是微軟首席軟件開發經理,負責開源容器編排系統 Kubernetes 在 Azure 的落地實踐,之前曾任職于盛大云和騰訊。哥們在云計算領域有近 10 年工作經驗,所以對 Linux 性能優化有一套自己的思考和沉淀。