目 錄
前言
第一版前言
第1章 性能測試過程 1
1.1 性能測試過程概述 1
1.2 性能測試設(shè)計(jì) 2
1.2.1 需求調(diào)研 2
1.2.2 業(yè)務(wù)模型 3
1.2.3 場景模型 5
1.2.4 數(shù)據(jù)設(shè)計(jì) 6
1.2.5 環(huán)境設(shè)計(jì) 8
1.3 性能測試構(gòu)建 9
1.3.1 用例設(shè)計(jì) 9
1.3.2 腳本開發(fā) 11
1.3.3 場景設(shè)計(jì) 12
1.3.4 搭建測試環(huán)境 13
1.3.5 準(zhǔn)備數(shù)據(jù) 13
1.4 性能測試過程執(zhí)行 13
1.5 性能測試分析、診斷、調(diào)節(jié) 13
1.6 小結(jié) 14
第2章 工作負(fù)載建模 15
2.1 什么是工作負(fù)載建模 15
2.2 工作負(fù)載建模主要活動 16
2.2.1 定義性能測試目標(biāo) 16
2.2.2 理解應(yīng)用程序 16
2.2.3 關(guān)鍵場景識別 17
2.2.4 確定關(guān)鍵場景使用路徑 17
2.2.5 確定唯一測試參數(shù) 18
2.2.6 確定場景中的相對負(fù)載分布 19
2.2.7 確定目標(biāo)負(fù)載水平 19
2.2.8 其他項(xiàng)設(shè)置 20
2.3 小結(jié) 20
第3章 生產(chǎn)系統(tǒng)性能測試 21
3.1 什么是生產(chǎn)環(huán)境 21
3.2 生產(chǎn)環(huán)境性能測試風(fēng)險(xiǎn) 22
3.3 為什么需要在生產(chǎn)環(huán)境下進(jìn)行性能測試 23
3.4 生產(chǎn)環(huán)境性能測試誤解 24
3.5 生產(chǎn)環(huán)境下性能測試最佳實(shí)踐 25
3.6 小結(jié) 26
第4章 特殊協(xié)議 27
4.1 Windows Sockets(WinSock)協(xié)議 27
4.1.1 Windows Sockets錄制選項(xiàng)設(shè)置 27
4.1.2 Windows Sockets錄制 29
4.1.3 Windows Sockets數(shù)據(jù)操作 33
4.1.4 關(guān)于LRS函數(shù) 35
4.2 郵件服務(wù)協(xié)議 41
4.2.1 郵件服務(wù)協(xié)議簡介 41
4.2.2 郵件服務(wù)協(xié)議錄制 43
4.2.3 腳本分析 48
4.2.4 關(guān)于SMTP和POP3函數(shù) 50
4.3 小結(jié) 52
第5章 基于接口性能測試 53
5.1 WSDL協(xié)議簡介 53
5.2 Web Service接口測試 56
5.2.1 選擇Web Services協(xié)議 56
5.2.2 選擇Manage Services管理待測試的
服務(wù) 57
5.2.3 Import Services導(dǎo)入服務(wù) 58
5.2.4 添加服務(wù)調(diào)用(Add Service Call) 60
5.2.5 調(diào)試腳本 63
5.2.6 增強(qiáng)腳本 64
5.3 web_service_call函數(shù) 65
5.4 Java環(huán)境 68
5.5 JavaVuser常用函數(shù) 69
5.6 JavaVuser腳本 70
5.6.1 手工插入Java的方法 71
5.6.2 增強(qiáng)Java腳本 72
5.6.3 Java腳本關(guān)聯(lián) 72
5.6.4 Java腳本參數(shù)化 72
5.7 web_submit_data 73
5.8 web_custom_request 76
5.9 小結(jié) 80
第6章 全鏈路腳本開發(fā) 81
6.1 什么是全鏈路性能腳本 81
6.2 如何將腳本封裝成.h頭文件 83
6.3 業(yè)務(wù)場景對全鏈路腳本的影響 86
6.3.1 關(guān)鍵場景識別 87
6.3.2 確定主要場景導(dǎo)航路徑 89
6.4 全鏈路腳本開發(fā)實(shí)例 89
6.5 小結(jié) 94
第7章 操作系統(tǒng)性能監(jiān)控與調(diào)優(yōu) 95
7.1 Windows操作系統(tǒng)監(jiān)控 95
7.1.1 LoadRunner直接監(jiān)控 95
7.1.2 Windows性能工具監(jiān)控 96
7.1.3 Windows計(jì)數(shù)器 101
7.2 Linux/UNIX操作系統(tǒng)監(jiān)控 107
7.2.1 程序執(zhí)行模型 107
7.2.2 CPU監(jiān)控 110
7.2.3 內(nèi)存監(jiān)控 115
7.2.4 磁盤監(jiān)控 119
7.2.5 網(wǎng)絡(luò)監(jiān)控 124
7.3 nmon系統(tǒng)資源監(jiān)控工具 128
7.3.1 nmon工作流程 128
7.3.2 nmon命令 129
7.3.3 結(jié)果分析 137
7.4 小結(jié) 138
第8章 Apache監(jiān)控與調(diào)優(yōu) 139
8.1 Apache目錄結(jié)構(gòu) 139
8.2 Apache配置文件 140
8.3 Apache監(jiān)控 144
8.3.1 status模塊監(jiān)控 144
8.3.2 Apachetop監(jiān)控 151
8.4 Apache調(diào)優(yōu) 154
8.4.1 硬件與操作系統(tǒng) 154
8.4.2 運(yùn)行時(shí)的配置 155
8.4.3 編譯時(shí)的配置 159
8.5 MPM調(diào)優(yōu) 161
8.5.1 選擇MPM 161
8.5.2 MPM模塊工作原理 162
8.5.3 MPM相關(guān)參數(shù) 165
8.6 日志文件分析 171
8.6.1 access_log日志文件 171
8.6.2 error_log日志文件 173
8.6.3 日志文件分析工具或指令 173
8.7 小結(jié) 175
第9章 Tomcat監(jiān)控與調(diào)優(yōu) 176
9.1 Tomcat結(jié)構(gòu)體系 176
9.2 Tomcat監(jiān)控 180
9.2.1 Status頁監(jiān)控 180
9.2.2 JConsole監(jiān)控 182
9.2.3 Probe監(jiān)控 192
9.3 Tomcat調(diào)優(yōu) 197
9.3.1 Tomcat配置 198
9.3.2 連接器配置 202
9.3.3 APR配置 207
9.4 JVM調(diào)優(yōu) 211
9.4.1 JVM內(nèi)存模型 211
9.4.2 堆與棧 214
9.4.3 PermGen與Metaspace的區(qū)別 215
9.4.4 GC回收機(jī)制 218
9.4.5 垃圾收集算法 219
9.4.6 垃圾回收器 223
9.4.7 類加載過程 230
9.4.8 JVM參數(shù)設(shè)置 231
9.5 日志文件分析 236
9.5.1 日志文件類型 236
9.5.2 日志文件配置 236
9.6 小結(jié) 239
第10章 Nginx監(jiān)控與調(diào)優(yōu) 240
10.1 Nginx三大工作模塊 241
10.1.1 Nginx啟動、停止 241
10.1.2 Nginx工作原理 242
10.1.3 Nginx進(jìn)程模型 243
10.1.4 Nginx Http請求過程 243
10.2 Nginx配置上下文 245
10.3 Nginx監(jiān)控 245
10.3.1 status監(jiān)控 246
10.3.2 Ngxtop監(jiān)控 247
10.4 Nginx負(fù)載均衡 251
10.4.1 負(fù)載均衡概述 251
10.4.2 Nginx負(fù)載均衡工作原理 251
10.4.3 設(shè)置Http負(fù)載均衡 252
10.4.4 負(fù)載均衡算法 253
10.4.5 設(shè)置服務(wù)器權(quán)重 255
10.4.6 慢啟動 257
10.4.7 限制連接數(shù) 257
10.4.8 開啟會話持久性 257
10.5 健康檢查 259
10.5.1 被動式健康檢查 259
10.5.2 主動式健康檢查 260
10.5.3 強(qiáng)制健康檢查 262
10.6 Nginx壓縮與解壓 263
10.6.1 啟用壓縮 264
10.6.2 啟用解縮 265
10.6.3 發(fā)送壓縮文件 266
10.7 Nginx緩存 266
10.7.1 啟用響應(yīng)緩存 266
10.7.2 與進(jìn)程相關(guān)的緩存 268
10.7.3 指定緩存的請求 268
10.7.4 限制或禁用響應(yīng)緩存 269
10.7.5 清除緩存內(nèi)容 269
10.7.6 字節(jié)范圍緩存 271
10.7.7 組合緩存配置實(shí)例 272
10.8 小結(jié) 273
第11章 MS SQL數(shù)據(jù)庫監(jiān)控與調(diào)優(yōu) 274
11.1 監(jiān)控SQL Server資源 274
11.1.1 瓶頸類型 274
11.1.2 內(nèi)存瓶頸 275
11.1.3 瓶頸類型 277
11.1.4 磁盤瓶頸 277
11.1.5 Wait Statistics監(jiān)控 278
11.2 SQL Server等待類型 279
11.2.1 SQL等待類型 279
11.2.2 如何跟蹤等待 289
11.2.3 阻塞與鎖 291
11.3 SQL Profiler監(jiān)控查詢 296
11.3.1 SQL Trace相關(guān)術(shù)語 296
11.3.2 SQL Trace選項(xiàng) 299
11.3.3 捕獲阻塞事件 303
11.3.4 捕獲Showplan XML數(shù)據(jù) 305
11.3.5 捕獲死鎖圖 308
11.3.6 SQL Profiler識別長時(shí)間查詢 311
11.3.7 Profile Trace與System Monitor關(guān)聯(lián) 315
11.4 索引調(diào)優(yōu) 317
11.4.1 索引原理 317
11.4.2 填充因子 317
11.4.3 聚集索引 318
11.4.4 非聚集索引 321
11.4.5 堆表 323
11.4.6 用DTA調(diào)校索引 323
11.4.7 索引維護(hù) 329
11.5 T-SQL調(diào)優(yōu) 333
11.5.1 NOT IN和NOT EXISTS 333
11.5.2 謂詞的使用 334
11.5.3 為中間結(jié)果使用臨時(shí)表 335
11.6 小結(jié) 336
第12章 MySQL性能監(jiān)控與調(diào)優(yōu) 337
12.1 使用LoadRunner直接壓測MySQL 337
12.2 慢查詢 339
12.2.1 查看慢查詢相關(guān)設(shè)置 339
12.2.2 啟動和設(shè)置慢查詢 340
12.2.3 慢查詢?nèi)罩疚募治?340
12.2.4 慢查詢?nèi)罩痉治龉ぞ?/p>
mysqldumpslow 341
12.3 EXPLAIN語句 343
12.3.1 EXPLAIN語法 343
12.3.2 EXPLAIN Output Columns輸出列 344
12.3.3 EXPLAIN Join Types連接方式 347
12.3.4 EXPLAIN Extra Information額外信息 349
12.4 profile語句 352
12.4.1 開啟profile 352
12.4.2 show profile 352
12.5 索引 357
12.5.1 索引結(jié)構(gòu) 357
12.5.2 索引常用策略 361
12.5.3 索引優(yōu)缺點(diǎn) 372
12.6 查詢執(zhí)行過程 372
12.7 SQL執(zhí)行順序 376
12.8 優(yōu)化數(shù)據(jù)類型和優(yōu)化訪問數(shù)據(jù) 378
12.8.1 優(yōu)化數(shù)據(jù)類型 378
12.8.2 常見數(shù)據(jù)類型 379
12.8.3 優(yōu)化訪問數(shù)據(jù) 383
12.9 狀態(tài)監(jiān)控 384
12.9.1 SHOW STATUS語句 384
12.9.2 SHOW STATUS變量 386
12.10 配置文件 389
12.10.1 使用選項(xiàng)文件 389
12.10.2 配置文件常見設(shè)置 390
12.11 小結(jié) 396
第13章 Redis性能監(jiān)控與調(diào)優(yōu) 397
13.1 使用LoadRunner調(diào)用Redis API進(jìn)行壓測 397
13.2 Redis Slowlog 401
13.2.1 什么是Slowlog 401
13.2.2 設(shè)置Slowlog 401
13.2.3 查看Slowlog 402
13.3 持久化 403
13.3.1 RDB持久化 404
13.3.2 AOF持久化 408
13.3.3 RDB和AOF的優(yōu)缺點(diǎn) 411
13.3.4 備份策略RDB與AOF相互協(xié)同 411
13.4 主從復(fù)制 413
13.4.1 配置主從復(fù)制 413
13.4.2 斷開復(fù)制 415
13.4.3 主從復(fù)制工作原理 416
13.4.4 心跳 421
13.4.5 master關(guān)閉持久化,保證復(fù)制的安全性 422
13.4.6 Redis復(fù)制如何處理過期的key 423
13.4.7 允許只寫入N個附加的副本 423
13.4.8 只讀性質(zhì)的slave 424
13.4.9 重新啟動和故障轉(zhuǎn)移后的部分同步 424
13.5 哨兵 425
13.5.1 為什么需要Sentinel 425
13.5.2 部署Sentinel 425
13.5.3 主觀下線和客觀下線 427
13.5.4 故障轉(zhuǎn)移 428
13.5.5 Sentinel配置項(xiàng) 429
13.6 內(nèi)存優(yōu)化 430
13.6.1 獲取內(nèi)存數(shù)據(jù) 430
13.6.2 內(nèi)存消耗模型 432
13.6.3 內(nèi)存上限設(shè)置 434
13.6.4 回收內(nèi)存策略 434
13.7 性能測試 436
13.7.1 性能測試工具redis-benchmark 436
13.7.2 延遲監(jiān)控與分析 439
13.7.3 big key 446
13.7.4 Hot key 448
13.7.5 緩存粒度 451
13.7.6 緩存穿透 452
13.7.7 緩存擊穿 454
13.7.8 緩存雪崩 456
13.8 小結(jié) 457
第14章 前端性能監(jiān)控與調(diào)優(yōu) 458
14.1 前端監(jiān)控工具YSlow 458
14.1.1 安裝YSlow 458
14.1.2 使用YSlow 459
14.2 23大前端性能規(guī)則 462
14.2.1 最小化HTTP請求 462
14.2.2 使用內(nèi)容發(fā)布網(wǎng)絡(luò) 463
14.2.3 添加Expires頭 463
14.2.4 Gzip組件 465
14.2.5 將樣式表放在頂部 465
14.2.6 將腳本放在底部 466
14.2.7 避免使用CSS表達(dá)式 468
14.2.8 將JavaScript和CSS置于外部 469
14.2.9 減少DNS查找 471
14.2.10 精簡JavaScript和CSS 472
14.2.11 避免重定向 474
14.2.12 刪除重復(fù)腳本 478
14.2.13 配置ETags 478
14.2.14 使AJAX可緩存 480
14.2.15 AJAX使用Get請求 481
14.2.16 減少DOM數(shù) 483
14.2.17 避免空鏈接 485
14.2.18 避免404錯誤 486
14.2.19 減少Cookie的大小 488
14.2.20 使用一些空閑Cookie的域 492
14.2.21 避免過濾器 494
14.2.22 不要縮放圖片 496
14.2.23 使用icon格式圖片和使用緩存 496
14.3 小結(jié) 497