如何作好性能測試分析診斷調優-暨《性能測試、分析診斷與調優實踐》-贈書。

一個系統或者軟件性能的重要性天然是無需多說,永遠沒有哪一個用戶能夠忍受打開一個網站或者軟件須要好久才能響應,性能是評估一個系統或者軟件最實在的指標,若是一個網站作得再好看、再漂亮,可是性能上不去,那也只是華而不實。html

筆者在離開測試崗進入研發崗已經有好幾個年頭了,按理說不該該再去寫關於軟件測試的書籍了而應該更多的去關注編程語言等研發工做,可是筆者在研發崗位上奮鬥幾年後發現其實性能並不該該是軟件測試工程師一我的的事情,而是一個涉及到很是多IT崗位的共同工做,例如架構師、技術經理、研發工程師、網絡工程師、運維工程師等都應該去關注性能。爲何這麼說呢?由於性能測試的工做不只僅是爲了完成一項性能測試任務來獲取系統或者軟件的性能指標,而更多的是要去發現性能問題、去分析診斷性能問題、去針對性能問題進行調優。某個性能問題多是架構設計缺陷引發,也有多是網絡佈線不足致使,固然也多是幾行代碼的影響,因此這是一個和不少IT崗位都相關的工做,是不少IT崗位都須要一塊兒去重視的工做。正由於性能如此重要,因此筆者在轉崗後仍是對性能念念不忘,從而也就有了這本書的問世,固然筆者也但願藉助本書能讓不一樣IT崗位的「同行」都能更多的去關注性能問題。java

這是一本理論和實踐相結合的同時面向研發和測試崗的關於性能分析診斷調優實踐的圖書,比起其餘的不少性能測試的圖書,本書中內容更側重於介紹如何去發現性能問題、分析診斷性能問題以及對發現的性能問題進行調優。書中的內容涵蓋了性能測試基礎、linux和windows服務器的性能分析、web和應用中間件的性能分析、java應用程序的性能分析、數據庫的性能分析、安卓APP的性能分析以及具體的性能分析案例實踐。這本書主要是面向有必定性能測試基礎或者編程語言基礎的朋友,對於剛剛接觸性能測試的朋友來講可能會稍顯吃力,建議在閱讀本書的同時能夠搭配其餘的基礎書籍一塊兒效果會更好,筆者相信讀完本書的朋友之後確定不會再爲「性能問題」而發愁。mysql

性能到底有多重要呢,咱們能夠舉一個網站訪問的例子來講明,一個網頁的加載速度若是超過4-5秒,可能25%的人會選擇放棄。百度的搜索結果響應時間慢0.4秒,一天的搜索量可能會減小千萬左右。因此一個系統,一個網站的性能決定了其可以支撐業務的能力。linux

不一樣的羣體對性能的理解可能會存在很大的差別,普通的用戶更加關心響應時間和穩定性。nginx

  • 訪問頁面響應還要讓我等多久才能加載出來?
  • 爲何有時候會訪問失敗?爲何會出現502?

架構師和工程師可能更加關心架構設計和代碼編寫的性能web

  • 應用架構設計是否合理?
  •  技術架構設計是否合理?
  •  數據架構設計是否合理?
  • 部署架構設計是否合理?
  • 代碼是否存在性能問題?
  • JVM中是否有不合理的內存分配和使用?
  • 線程同步和線程鎖是否合理?
  •  代碼的計算算法是否能夠進一步優化以減小CPU的消耗時間?

運維工程師可能更加關心繫統的監控以及穩定性狀況算法

  •  服務器各項資源使用率在正常範圍內嗎?
  •  數據庫的連接數在正常範圍內嗎?
  • Sql執行時間正常嗎,是否存在慢查詢日誌?
  • 系統可以支撐7*24小時連續不間斷的業務訪問嗎?
  • 系統是高可用的嗎,服務器節點宕機了會影響用戶使用嗎?
  •  對節點擴容後,能夠提升系統的性能嗎?

性能測試能夠發現的問題或者執行的目標描述以下:sql

一、瞭解系統的各項性能指標,經過性能壓測來了解系統能承受多大的併發訪問量、系統的平均響應時間是多少、系統的tps是多少等。數據庫

二、發現系統中存在的性能問題,常見的性能問題以下:apache

  • 系統中是否存在負載均衡不均的狀況,負載均衡不均勻通常指的在併發的狀況下,每臺服務器接收的併發壓力不均勻而致使的部分服務器可能由於壓力過大而出現性能急劇降低,而部分服務器由於太小而出現資源浪費的狀況。
  • 系統中是否存在內存泄漏問題,內存泄漏是指應用程序代碼在每次執行完後,不會主動釋放內存資源而致使內存使用一直增長,最終會使服務器物理內存所有耗光,程序運行逐漸變慢最終由於沒法申請到內存而退出運行,並且多數時候是很是緩慢的增長,不容易被發現,通常須要經過高併發性能壓測才能暴露。
  • 系統中是否存在鏈接系統問題,鏈接泄漏包含的很是普遍,能夠是數據庫鏈接泄漏、http鏈接泄漏或者其它的tcp/utp鏈接泄漏。除了系統實際狀況須要創建長鏈接外,通常短鏈接都應該是用完就須要關閉和釋放。
  • 系統中是否存在線程安全問題,線程安全問題是在高併發訪問的多線程處理的系統中常常會出現的問題,若是系統中存在線程安全問題,就會出現多個線程前後更改數據形成所獲得的數據所有髒數據,有時候甚至會形成巨大的經濟損失。
  • 系統中是否存在死鎖問題,死鎖問題也是多線程系統中常常會遇到的一個經典問題,通常常見的有系統死鎖、數據庫死鎖等。
  • 系統中是否存在網絡架構或者應用架構擴展性問題,擴展性問題通常是指在性能指標沒法知足預期的狀況下,經過橫向或者縱向擴展硬件資源後,系統性能指標沒法按照必定的線性規律進行快速遞增。
  • 發現系統的性能瓶頸在何處,性能瓶頸通常是指由於某些因素而形成系統的性能的沒法持續上升。

三、 解決性能壓測中存在的問題和性能瓶頸,經過不斷的性能調優,使得系統能夠知足預期的性能指標。

一個優秀的性能測試工程師至少須要具有:

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

業內專家如何點評《性能測試、分析診斷與調優實踐》

點評:作技術的人既要能腳踏實地又要能高瞻遠矚,最好還要有概括整理傳授的能力。永清的這本書,講的透講的深講的好用,實在是少有的精品。
點評人簡介:蔣彪,工學碩士,06年參加工做,歷任上海歐姆龍軟件工程師,蘇寧易購DevOps研發中心高級架構師,蘇寧人工智能研究院高級架構師,現任福特中國研究院軟件技術專家。曾在InfoQ等知名學術刊文發表多篇技術論文,在電子工業出版社出版《微服務與Docker實戰》《人工智能中臺化架構》等書。工做之餘兼任南大軟件學院客座講師,南京信息工程大學數理學院客座講師。在軟件研發流程管理,DevOps,中臺化架構等領域都有獨到看法。
 
本書做者簡介:從事功能測試、自動化測試、性能測試工做十多年,在自動化測試設計、性能測試設計、性能診斷、性能分析調優方面積累了多年經驗,參與過的系統涉及公安、互聯網、移動互聯網、大數據、人工智能等領域。2017年成功轉型爲Java開發工程師,前後任職於蘇寧大數據研發中心、蘇寧研究院、蘇寧人工智能研發中心,歷任測試經理、技術經理、部門經理、高級架構師等職位,重點關注大數據、圖像處理、架構設計等領域,著有《robot framework 自動化測試框架核心指南》。
爲了感謝你們支持,博客園短消息發送的第21位和41位 贈送《robot framework 自動化測試框架核心指南》樣書一本(自2020年3月10號起),第71位贈送 《性能測試、分析診斷與調優實踐》一本(預計7月-8月送出)。
 
相關文章
相關標籤/搜索