一個系統或者軟件性能的重要性天然是無需多說,永遠沒有哪一個用戶能夠忍受打開一個網站或者軟件須要好久才能響應,性能是評估一個系統或者軟件最實在的指標,若是一個網站作得再好看、再漂亮,可是性能上不去,那也只是華而不實。html
筆者在離開測試崗進入研發崗已經有好幾個年頭了,按理說不該該再去寫關於軟件測試的書籍了而應該更多的去關注編程語言等研發工做,可是筆者在研發崗位上奮鬥幾年後發現其實性能並不該該是軟件測試工程師一我的的事情,而是一個涉及到很是多IT崗位的共同工做,例如架構師、技術經理、研發工程師、網絡工程師、運維工程師等都應該去關注性能。爲何這麼說呢?由於性能測試的工做不只僅是爲了完成一項性能測試任務來獲取系統或者軟件的性能指標,而更多的是要去發現性能問題、去分析診斷性能問題、去針對性能問題進行調優。某個性能問題多是架構設計缺陷引發,也有多是網絡佈線不足致使,固然也多是幾行代碼的影響,因此這是一個和不少IT崗位都相關的工做,是不少IT崗位都須要一塊兒去重視的工做。正由於性能如此重要,因此筆者在轉崗後仍是對性能念念不忘,從而也就有了這本書的問世,固然筆者也但願藉助本書能讓不一樣IT崗位的「同行」都能更多的去關注性能問題。java
這是一本理論和實踐相結合的同時面向研發和測試崗的關於性能分析診斷調優實踐的圖書,比起其餘的不少性能測試的圖書,本書中內容更側重於介紹如何去發現性能問題、分析診斷性能問題以及對發現的性能問題進行調優。書中的內容涵蓋了性能測試基礎、linux和windows服務器的性能分析、web和應用中間件的性能分析、java應用程序的性能分析、數據庫的性能分析、安卓APP的性能分析以及具體的性能分析案例實踐。這本書主要是面向有必定性能測試基礎或者編程語言基礎的朋友,對於剛剛接觸性能測試的朋友來講可能會稍顯吃力,建議在閱讀本書的同時能夠搭配其餘的基礎書籍一塊兒效果會更好,筆者相信讀完本書的朋友之後確定不會再爲「性能問題」而發愁。mysql
性能到底有多重要呢,咱們能夠舉一個網站訪問的例子來講明,一個網頁的加載速度若是超過4-5秒,可能25%的人會選擇放棄。百度的搜索結果響應時間慢0.4秒,一天的搜索量可能會減小千萬左右。因此一個系統,一個網站的性能決定了其可以支撐業務的能力。linux
不一樣的羣體對性能的理解可能會存在很大的差別,普通的用戶更加關心響應時間和穩定性。nginx
架構師和工程師可能更加關心架構設計和代碼編寫的性能web
運維工程師可能更加關心繫統的監控以及穩定性狀況算法
性能測試能夠發現的問題或者執行的目標描述以下:sql
一、瞭解系統的各項性能指標,經過性能壓測來了解系統能承受多大的併發訪問量、系統的平均響應時間是多少、系統的tps是多少等。數據庫
二、發現系統中存在的性能問題,常見的性能問題以下:apache
三、 解決性能壓測中存在的問題和性能瓶頸,經過不斷的性能調優,使得系統能夠知足預期的性能指標。
一個優秀的性能測試工程師至少須要具有:
1)、熟練使用經常使用的性能測試工具,包括LoadRunner,Jmeter、nGrinder等,而且精通這些工具來編寫性能壓測腳本以及設置性能壓測場景。
2)、熟練掌握性能測試的基礎以及概念,能編寫出一個相對完美的性能測試方案,以及能合理的設置性能壓測的場景。
3)、熟練掌握Linux、Windows等常見服務器的性能監控以及分析診斷性能瓶頸,好比CPU大幅度的波動怎麼辦? CPU頻繁的上下文切換如何定位?如何看到某個線程當前在執行什麼?
4)、熟悉常見的Web中間件,應用中間件以及如何去對中間件進行性能監控分析和參數調優。
5)、熟悉Java應用程序的監控以及日誌分析, 目前大部分的性能測試都仍是以Java 應用爲主,包括大數據的不少項目也都是基於Java,好比Hadoop、Spark、Flink等。
6)、掌握數據庫的性能監控以及瓶頸定位分析,最多見的就是掌握Mysql的監控,好比慢日誌的分析、執行計劃、如何從監控中看出查詢有沒有走索引?
7)、能寫出一個完整的性能壓測報告,報告中除了包括壓測場景,性能指標外,還要分析性能的拐點,性能的趨勢、當前的性能瓶頸在哪裏? 能夠給出哪些可行的調優方式等等。
《性能測試、分析診斷與調優實踐》中到底講了些什麼?
《性能測試、分析診斷與調優實踐》 是預計於2020年6~7月份由清華大學出版社出版的側重於性能調優分析的指導性圖書,全書目錄以下:
序... 3
1. 性能測試和性能分析的基礎概念... 4
1.1. 性能測試的基礎概念... 4
1.1.1 性能測試的分類... 5
1.1.2 性能測試的場景... 6
1.2. 常見的性能測試指標... 7
1.2.1 響應時間... 7
1.2.2 TPS/QPS. 7
1.2.3 併發用戶... 7
1.2.4 PV/UV.. 8
1.2.5 點擊率... 8
1.2.6 吞吐量... 9
1.2.7 資源開銷... 9
1.3. 性能測試的目標... 9
1.4. 性能測試的基本流程... 10
1.4.1 性能需求分析... 10
1.4.2 制定性能測試計劃... 11
1.4.3 編寫性能測試方案... 13
1.4.4 編寫性能測試案例... 14
2. 服務器的性能監控和分析... 15
2.1 Linux服務器的性能指標監控和分析... 15
2.1.1 經過vmstat深挖服務器的性能問題... 15
2.1.2 如何經過mpstat 分析服務器的性能指標... 19
2.1.3 如何經過pidstat發現性能問題... 21
2.1.4 從lsof中能看到什麼... 29
2.1.5 如何經過free看懂內存的真實使用... 39
2.1.6 如何經過top發現問題... 40
2.1.7 網絡流量如何監控... 44
2.1.8 nmon對Linux服務器的總體性能監控... 51
2.2 Windows服務器的性能指標監控和分析... 54
2.2.1 Windows性能監視器... 54
2.2.2 Windows性能監視器下的性能分析... 69
3. web中間件的性能分析... 74
3.1 nginx的性能分析和調優... 74
3.1.1 nginx的負載均衡策略的選擇... 74
3.1.2 nginx進程數的配置優化... 77
3.1.3 nginx事件處理模型的優化... 77
3.1.4 nginx客戶端鏈接數的優化... 80
3.1.5 nginx中文件傳輸的優化... 81
3.1.6 nginx中FastCGI配置的優化... 84
3.1.7 nginx的監控... 87
3.2 apache的性能分析和調優... 89
3.2.1 apache的工做模式選擇和進程數調優... 89
3.2.2 apache的mod選擇和優化... 94
3.2.3 apache的keepAlive優化... 97
3.2.4 apache的ab壓力測試工具... 98
3.2.5 apache的性能監控... 101
4. 應用中間件的性能分析... 102
4.1 tomcat的性能分析和調優... 103
4.1.1 tomcat的組件以及工做原理... 103
4.1.2 tomcat容器Connector性能參數優化... 108
4.1.3 tomcat容器的I/O優化... 110
4.2 wildfly的性能分析和調優... 115
4.2.1 wildfly standalone模式介紹... 115
4.2.2 wildfly standalone模式管理控制檯性能參數優化... 119
4.2.3 wildfly standalone模式性能監控... 130
5. java應用程序的性能分析和調優... 139
5.1 jvm基礎知識... 139
5.1.1 jvm簡介... 139
5.1.2 類加載器... 141
5.1.3 java虛擬機棧和本地方法棧... 144
5.1.4 方法區與元數據區... 144
5.1.5 堆區... 145
5.1.6 程序計數器... 147
5.1.7 垃圾回收... 147
5.1.8 並行與併發... 151
5.1.9 垃圾回收器... 152
5.2 jvm如何監控... 154
5.2.1 jconsole. 154
5.2.2 jvisualvm.. 162
5.2.3 jmap. 175
5.2.4 jstat 176
5.3 jvm性能分析與診斷... 177
5.3.1 如何讀懂gc日誌... 177
5.3.2 jstack. 182
5.3.3 MemoryAnalyzer. 189
5.4 jvm性能調優技巧... 200
5.4.1 如何減小gc. 200
5.4.2 另類java內存泄漏... 202
6. 數據庫的性能分析... 203
6.1 mysql數據庫的性能監控... 203
6.1.1 如何查看mysql數據庫的鏈接數... 203
6.1.2 如何查看mysql數據庫當前運行的事務與鎖... 203
6.1.3 mysql中數據庫表的監控... 207
6.1.4 性能測試時mysql中其它經常使用監控... 211
6.2 mysql數據庫的性能定位... 214
6.2.1 慢sql 214
6.2.2 執行計劃... 215
7. 性能測試案例分析... 218
7.1 jmeter對http 服務的性能壓測分析... 218
7.2 LoadRunner對http 服務的性能壓測分析... 232
7.3 jmeter對rpc 服務的性能壓測分析... 251
7.3.1 jmeter 如何經過自定義Sample來壓測RPC服務... 251
7.3.2 jmeter對GRPC服務的性能壓測分析... 262
8. 安卓APP的性能分析... 270
8.1 adb. 270
8.2 DDMS. 273
8.3 Android Studio profiler 288
8.4 systrace. 295
業內專家如何點評《性能測試、分析診斷與調優實踐》