大型網(wǎng)絡(luò)、云計算、大數(shù)據(jù)和虛擬計算機(jī)系統(tǒng)的快速部署已經(jīng)為性能優(yōu)化帶來了新的挑戰(zhàn)。本書為此提供了解決方案。國際知名的性能優(yōu)化專家Brendan Gregg匯集了的技術(shù)和工具來分析調(diào)優(yōu)大型網(wǎng)絡(luò)或云計算的環(huán)境。本書的內(nèi)容包括現(xiàn)代化的性能分析和容量規(guī)劃;與云計算相關(guān)的新性能和性挑戰(zhàn);方法、概念、術(shù)語、工具和指標(biāo);負(fù)載與結(jié)構(gòu)問題的權(quán)衡;調(diào)整操作系統(tǒng)、CPU、內(nèi)存、文件系統(tǒng)、磁盤、網(wǎng)絡(luò)和總線;調(diào)整虛擬系統(tǒng);性能相關(guān)的編程語言問題,對C、 C 、 Java和node.js編寫的應(yīng)用程序分析。
大型企業(yè)服務(wù)、云計算和虛擬計算系統(tǒng)都面臨著嚴(yán)重的性能挑戰(zhàn)。如今,國際知名的性能專家Brendan Gregg將業(yè)界驗證的方法、工具和指標(biāo)融匯在一起,足以應(yīng)對為復(fù)雜環(huán)境的分析和調(diào)優(yōu)工作?!缎阅苤畮p》著力講述Linux和Unix的性能,但所論述的性能問題適用于所有操作系統(tǒng)。你將洞察到系統(tǒng)是如何工作與執(zhí)行的,學(xué)習(xí)到如何分析和改進(jìn)系統(tǒng)和應(yīng)用程序性能的方法。
Gregg書中的示例都通過裸機(jī)和云端虛擬機(jī)做演示,所運(yùn)行的系統(tǒng)包括基于Linux的Ubuntu、Fedora、CentOS和基于Illumos的Joyent SmartOS和OminiTI OmniOS。無論是CPU、內(nèi)存、磁盤與網(wǎng)絡(luò)的"傳統(tǒng)"分析,還是像云計算和動態(tài)跟蹤這類新領(lǐng)域,本書系統(tǒng)地覆蓋了現(xiàn)代系統(tǒng)性能的方方面面。這本書還幫助你識別復(fù)雜性能中"未知的未知"——在你不知道的地方出現(xiàn)的瓶頸。本書還收納了一個詳實的研究實例,向你展示一個真實云計算問題是如何從頭到尾做分析的。
□ 現(xiàn)代性能分析與調(diào)優(yōu):術(shù)語、概念、模型、方法和技術(shù)
□ 動態(tài)跟蹤技術(shù)與工具,收錄DTrace、SystemTap和Perf示例
□ 內(nèi)核內(nèi)幕:揭示OS在做什么
□ 如何使用系統(tǒng)觀測工具、接口和框架
□ 理解和監(jiān)控應(yīng)用程序性能
□ 優(yōu)化CPU:處理器、核、硬件線程、緩存、互聯(lián)與內(nèi)核調(diào)度
□ 內(nèi)存優(yōu)化:虛擬內(nèi)存、換頁、交換、內(nèi)存架構(gòu)、總線、地址空間與分配器
□ 文件系統(tǒng)I/O,包括緩存
□ 存儲設(shè)備/控制器、磁盤I/O工作負(fù)載、RAID,以及內(nèi)核I/O
□ 網(wǎng)絡(luò)相關(guān)性能問題:協(xié)議、套接字、網(wǎng)卡和物理連接。
□ OS和基于硬件虛擬化的性能實現(xiàn),以及云計算所遇到的新問題
□ 基準(zhǔn)測試:如何得到的結(jié)果并避免一般性的錯誤
《性能之巔:洞悉系統(tǒng)、企業(yè)與云計算》是企業(yè)和云計算環(huán)境運(yùn)維人員的必備指導(dǎo):系統(tǒng)管理員、網(wǎng)絡(luò)管理員、數(shù)據(jù)庫管理員和Web管理員、開發(fā)工程師以及其他專業(yè)人員。對于新接觸性能優(yōu)化的學(xué)生等人員,本書還提供了飽含Gregg豐富的教學(xué)經(jīng)驗的練習(xí)題目。
Brendan Gregg 是Joyent公司的首席性能工程師,通過軟件棧分析性能和擴(kuò)展。在Sun Microsystem公司(之后為Oracle)作為首席性能和內(nèi)核工程師期間,他的工作包括開發(fā)ZFS L2ARC,這是一個利用閃速存儲器提升性能的文件系統(tǒng)。他還開發(fā)了許許多多的性能工具,部分工具收錄在Mac OS X和Oracle Solaris 11的發(fā)行版中。他近從事的工作覆蓋針對Linux和illumos內(nèi)核分析的性能可視化。他還是《DTrace》(Prentice Hall出版社,2011年)和《Solaris Performance and Tools》的兩書合著者。
譯者介紹:
徐章寧,1984年生,畢業(yè)于上海交通大學(xué),碩士畢業(yè)后一直從事軟件運(yùn)維工作,在云存儲與虛擬化領(lǐng)域浸沁多年,現(xiàn)于百度公司擔(dān)任高級運(yùn)維工程師,致力于大數(shù)據(jù)方向運(yùn)維。鐘愛開源軟件,平日熱愛讀書和寫作,《算法謎題》《編程格調(diào)》合譯者。
吳寒思,2010年畢業(yè)于南京大學(xué)軟件學(xué)院,目前就職于EMC公司核心技術(shù)部從事文件系統(tǒng)研發(fā)工作,擁有2項文件系統(tǒng)方面專利。對程序設(shè)計、系統(tǒng)存儲、云計算和操作系統(tǒng)有濃厚興趣。
陳磊,1979年生,畢業(yè)于同濟(jì)大學(xué)。從事網(wǎng)絡(luò)、系統(tǒng)和IT管理14年。曾就職于EMC中國研發(fā)集團(tuán),任實驗室經(jīng)理。目前在互聯(lián)網(wǎng)金融企業(yè)負(fù)責(zé)基礎(chǔ)架構(gòu)。興趣廣泛,尤其熱愛開源軟件和其它各類新興技術(shù)的探討和研究。
第1章 緒論1
1.1 系統(tǒng)性能1
1.2 人員2
1.3 事情3
1.4 視角4
1.5 性能是充滿挑戰(zhàn)的4
1.5.1 性能是主觀的4
1.5.2 系統(tǒng)是復(fù)雜的5
1.5.3 可能有多個問題并存6
1.6 延時6
1.7 動態(tài)跟蹤7
1.8 云計算8
1.9 案例研究8
1.9.1 緩慢的磁盤9
1.9.2 軟件變更10
1.9.3 更多閱讀12
第2章 方法13
2.1 術(shù)語14
2.2 模型14
2.2.1 受測系統(tǒng)15
2.2.2 排隊系統(tǒng)15
2.3 概念16
2.3.1 延時16
2.3.2 時間量級17
2.3.3 權(quán)衡三角18
2.3.4 調(diào)整的影響19
2.3.5 合適的層級19
2.3.6 性能建議的時間點20
2.3.7 負(fù)載vs.架構(gòu)20
2.3.8 擴(kuò)展性21
2.3.9 已知的未知22
2.3.10 指標(biāo)23
2.3.11 使用率24
2.3.12 飽和度25
2.3.13 剖析26
2.3.14 緩存26
2.4 視角28
2.4.1 資源分析28
2.4.2 工作負(fù)載分析29
2.5 方法30
2.5.1 街燈反方法31
2.5.2 隨機(jī)變動反方法32
2.5.3 責(zé)怪他人反方法32
2.5.4 ad hoc核對清單法33
2.5.5 問題陳述法33
2.5.6 科學(xué)法34
2.5.7 診斷循環(huán)35
2.5.8 工具法35
2.5.9 USE方法36
2.5.10 工作負(fù)載特征歸納42
2.5.11 向下挖掘分析43
2.5.12 延時分析44
2.5.13 R方法45
2.5.14 事件跟蹤45
2.5.15 基礎(chǔ)線統(tǒng)計47
2.5.16 靜態(tài)性能調(diào)整47
2.5.17 緩存調(diào)優(yōu)47
2.5.18 微基準(zhǔn)測試48
2.6 建模49
2.6.1 企業(yè)vs.云49
2.6.2 可視化識別49
2.6.3 Amdahl擴(kuò)展定律51
2.6.4 通用擴(kuò)展定律52
2.6.5 排隊理論52
2.7 容量規(guī)劃56
2.7.1 資源極限56
2.7.2 因素分析58
2.7.3 擴(kuò)展方案58
2.8 統(tǒng)計59
2.8.1 量化性能59
2.8.2 平均值60
2.8.3 標(biāo)準(zhǔn)方差、百分位數(shù)、中位數(shù)61
2.8.4 變異系數(shù)62
2.8.5 多重模態(tài)分布62
2.8.6 異常值63
2.9 監(jiān)視63
2.9.1 基于時間的規(guī)律63
2.9.2 監(jiān)測產(chǎn)品65
2.9.3 啟動以來的信息統(tǒng)計65
2.10 可視化65
2.10.1 線圖65
2.10.2 散點圖66
2.10.3 熱圖67
2.10.4 表面圖68
2.10.5 可視化工具69
2.11 練習(xí)70
2.12 參考70
第3章 操作系統(tǒng)72
3.1 術(shù)語72
3.2 背景73
3.2.1 內(nèi)核73
3.2.2 棧76
3.2.2 中斷和中斷線程77
3.2.4 中斷優(yōu)先級78
3.2.5 進(jìn)程78
3.2.6 系統(tǒng)調(diào)用80
3.2.7 虛擬內(nèi)存82
3.2.8 內(nèi)存管理82
3.2.9 調(diào)度器83
3.2.10 文件系統(tǒng)84
3.2.11 緩存86
3.2.12 網(wǎng)絡(luò)87
3.2.13 設(shè)備驅(qū)動87
3.2.14 多處理器87
3.2.15 搶占88
3.2.16 資源管理88
3.2.17 觀測性89
3.3 內(nèi)核89
3.3.1 UNIX90
3.3.2 基于Solaris90
3.3.3 基于Linux93
3.3.4 差異95
3.4 練習(xí)96
3.5 參考96
第4章 觀測工具98
4.1 工具類型98
4.1.1 計數(shù)器99
4.1.2 跟蹤100
4.1.3 剖析101
4.1.4 監(jiān)視(sar)102
4.2 觀測來源103
4.2.1 /proc103
4.2.2 /sys108
4.2.3 kstat109
4.2.4 延時核算111
4.2.5 微狀態(tài)核算112
4.2.6 其他的觀測源112
4.3 DTrace114
4.3.1 靜態(tài)和動態(tài)跟蹤115
4.3.2 探針116
4.3.3 provider116
4.3.4 參數(shù)117
4.3.5 D語言117
4.3.6 內(nèi)置變量118
4.3.7 action118
4.3.8 變量類型119
4.3.9 單行命令121
4.3.10 腳本121
4.3.11 開銷122
4.3.12 文檔和資源123
4.4 SystemTap124
4.4.1 探針124
4.4.2 tapset125
4.4.3 action和內(nèi)置變量125
4.4.4 示例125
4.4.5 開銷127
4.4.6 文檔和資源128
4.5 perf128
4.6 觀測工具的觀測129
4.7 練習(xí)130
4.8 參考130
第5章 應(yīng)用程序131
5.1 應(yīng)用程序基礎(chǔ)131
5.1.1 目標(biāo)132
5.1.2 常見情況的優(yōu)化133
5.1.3 觀測性134
5.1.4 大O標(biāo)記法134
5.2 應(yīng)用程序性能技術(shù)135
5.2.1 選擇I/O尺寸135
5.2.2 緩存136
5.2.3 緩沖區(qū)136
5.2.4 輪詢136
5.2.5 并發(fā)和并行137
5.2.6 非阻塞I/O139
5.2.7 處理器綁定139
5.3 編程語言140
5.3.1 編譯語言140
5.3.2 解釋語言141
5.3.3 虛擬機(jī)142
5.3.4 垃圾回收142
5.4 方法和分析143
5.4.1 線程狀態(tài)分析143
5.4.2 CPU剖析146
5.4.3 系統(tǒng)調(diào)用分析148
5.4.4 I/O剖析154
5.4.5 工作負(fù)載特征歸納155
5.4.6 USE方法155
5.4.7 向下挖掘法156
5.4.8 鎖分析156
5.4.9 靜態(tài)性能調(diào)優(yōu)159
5.5 練習(xí)160
5.6 參考161
第6章 CPU162
6.1 術(shù)語163
6.2 模型163
6.2.1 CPU架構(gòu)163
6.2.2 CPU內(nèi)存緩存164
6.2.3 CPU運(yùn)行隊列165
6.3 概念165
6.3.1 時鐘頻率165
6.3.2 指令166
6.3.3 指令流水線166
6.3.4 指令寬度167
6.3.5 CPI,IPC167
6.3.6 使用率167
6.3.7 用戶時間/內(nèi)核時間168
6.3.8 飽和度168
6.3.9 搶占168
6.3.10 優(yōu)先級反轉(zhuǎn)169
6.3.11 多進(jìn)程,多線程169
6.3.12 字長170
6.3.13 編譯器優(yōu)化171
6.4 架構(gòu)171
6.4.1 硬件171
6.4.2 軟件179
6.5 方法184
6.5.1 工具法184
6.5.2 USE方法185
6.5.3 負(fù)載特征歸納186
6.5.4 剖析187
6.5.5 周期分析188
6.5.6 性能監(jiān)控189
6.5.7 靜態(tài)性能調(diào)優(yōu)189
6.5.8 優(yōu)先級調(diào)優(yōu)189
6.5.9 資源控制190
6.5.10 CPU綁定190
6.5.11 微型基準(zhǔn)測試191
6.5.12 擴(kuò)展191
6.6 分析192
6.6.1 uptime192
6.6.2 vmstat194
6.6.3 mpstat195
6.6.4 sar197
6.6.5 ps198
6.6.6 top199
6.6.7 prstat200
6.6.8 pidstat201
6.6.9 time和ptime202
6.6.10 DTrace203
6.5.11 SystemTap209
6.6.12 perf209
6.6.13 cpustat215
6.6.14 其他工具216
6.6.15 可視化216
6.7 實驗219
6.7.1 Ad Hoc219
6.7.2 SysBench220
6.8 調(diào)優(yōu)220
6.8.1 編譯器選項221
6.8.2 調(diào)度優(yōu)先級和調(diào)度類221
6.8.3 調(diào)度器選項221
6.8.4 進(jìn)程綁定223
6.8.5 獨(dú)占CPU組224
6.8.6 資源控制224
6.8.7 處理器選項(BIOS調(diào)優(yōu))224
6.9 練習(xí)225
6.10 參考資料226
第7章 內(nèi)存228
7.1 術(shù)語229
7.2 概念229
7.2.1 虛擬內(nèi)存230
7.2.2 換頁230
7.2.3 按需換頁231
7.2.4 過度提交233
7.2.5 交換233
7.2.6 文件系統(tǒng)緩存占用233
7.2.7 使用率和飽和度234
7.2.8 分配器234
7.2.9 字長234
7.3 架構(gòu)234
7.3.1 硬件235
7.3.2 軟件239
7.3.3 進(jìn)程地址空間244
7.4 方法248
7.4.1 工具法249
7.4.2 USE方法249
7.4.3 使用特征歸納250
7.4.4 周期分析25