在一個網站應用系統的完整生命週期中,上線以前還有漫長的開發和測試階段。做爲系統將來的管理者和負責人,運維人員有必要在這個階段就參與進來,根據業務的預期,完成系統層面的容量和壓力測試,根據測試數據作出切實的運維規劃,包括採購清單、結構設計、預警閾值和應急預案等。html
能夠說,監控,是防止「千里之堤,潰於蟻穴」;測試,是「萬丈高樓第一層」。mysql
1、服務器性能測試git
和監控同樣,測試工做也分爲服務器和應用兩大部分。能夠說,全部監控須要關心的數據,都對應地須要提早進行測試,這裏再也不舉例。下面介紹一些經常使用的測試工具,功能也許會有重疊,但都會有本身側重的有特點的地方。掌握好工具最鋒利的部分,靈活運用,就能夠構建出最適合本身的測試工具箱了。github
1.IOzonesql
文件讀寫性能包括兩個層面,一方面是純粹的磁盤讀寫能力。這方面本書以前章節已有介紹,咱們能夠經過硬件設備的數據進行估算;另外一方面是文件系統的讀寫能力。在這方面,各類文件系統的實現細節毫釐千里,通常運維人員很難也沒有必要花費大量時間來逐一研讀代碼。經過儘量貼近場景的模擬測試,來獲取足以支持選擇某個文件系統理由的數據,成爲最方便快捷的辦法。數據庫
IOzone可使用系統調用,經過模擬在文件系統層面的各類讀寫操做,來統計系統的文件I/O性能。比較貼心的是,IOzone還能自動把測試結果經過gnuplot繪製成三維圖形,使得使用者能夠更直觀地瞭解I/O狀況。IOzone官網地址:http://www.iozone.org/緩存
IOzone目前支持13種I/O類型的測試,能夠根據業務狀況採用多個"-I"參數來指定,具體參數值和類型以下:服務器
(1)write/re-write網絡
寫新文件和重寫一個已存在文件,差異在於重寫文件不須要建立文件元信息。數據結構
(2)read/re-read
讀文件和重讀文件,差異在於操做系統的緩存。
(3)random-read/write
隨機讀寫。主要受操做系統緩存大小、磁盤數據和RAID級別、磁盤轉速等因素影響。
(4)Read-backwards
逆序讀文件。某些操做系統對上TB大小的文件讀寫作的不太好,因此出現這個測試。
(5)Re-write-record
對文件的一個特定點進行重寫測試。當這個特定點的大小分佈介於CPU緩存、TLB、操做系統緩存的不一樣區間時,性能會大大不一樣。
(6)stride-read
跳躍式讀取文件。好比從文件起始位置連續讀取4KB內容,而後seek到200KB以後,再讀取4KB長度,接着又seek,以此類推。這個行爲用來模擬某些應用的特定數據結構操做。
(7)fwrite/re-fwrite
使用fwrite庫測試。fwrite會利用用戶空間的buffer,因此當應用在寫比較小的內容時,fwrite會進行阻塞合併操做,而後每次以較大的內容進行一次真正的寫操做以提升性能。
(8)fread/re-fread
使用fread庫測試,特色和fwrite一致。
(9)random mix
混合隨機讀寫。這個測試只用於吞吐量測試。每一個線程均可以執行讀或者寫,具體如何執行則由round-robin輪詢決定。
(10)pwrite/re-pwrite
在文件的指定偏移量處開始寫和重寫。以前的測試都是從起始位置開始的。
(11)pread/re-pread
在文件的指定偏移量處開始讀和重讀。
(12)pwritev/re-pwritev
與pwrite相似,不過是從多個buffer中寫出數據。
(13)preadv/re-preadv
和pread相似,不過是讀取到多個buffer中。
關於IOzone的安裝和使用,我以爲能夠參考這個教程:https://blog.csdn.net/u012528029/article/details/51002950
2.Netperf
衡量網絡性能主要有五項指標,包括:可用性、響應時間、網絡利用率、網絡吞吐量和網絡帶寬容量。而獲取這些的指標方式,也有三種:
其一,經過Net-SNMP工具從網絡設備中讀取數據;
其二,經過TCPDump工具抓取網絡報文分析;
其三,經過模擬測試獲取數據。
最多見的模擬測試工具,就是Netperf。Netperf工具以client/server方式工做。server端是netserver,用來偵聽來自client端的鏈接;client是netperf,用來向server發起網絡測試。在client和server之間,首先要創建一個控制鏈接,傳遞有關測試配置的信息,以及測試的結果。在控制鏈接創建並傳遞測試配置信息之後,client和server之間會再創建一個測試鏈接,用來來回傳遞這特殊的流量模式,以測試網絡的性能。
官網地址:http://www.netperf.org/
(1)測試流量模式介紹
Netperf主要測試的是基於TCP或UDP的傳輸,針對兩種協議分別有不一樣的流量模式。Netperf測試結果所反映的是一個系統可以以多塊的速度向另一個系統發送數據,以及另一個系統可以以多塊的速度接收數據。
TCP協議可以提供端對端的可靠傳輸,其創建並維護鏈接、控制數據有序地傳遞等都會消耗必定的網絡帶寬。因此TCP測試會比較考慮帶寬和效率的問題。Netperf能夠模擬三種不一樣的TCP流量模式。
a.單個TCP鏈接,批量傳輸大量數據。
b.單個TCP鏈接,Client少許請求/Server大量響應的交易模式。
c.多個TCP鏈接,每一個鏈接中一對請求/響應的交易模式。
UDP協議沒有創建鏈接的負擔,可是卻不能保證傳輸的可靠性,使用UDP的應用程序須要自行跟蹤每一個發出的分組,並重發丟失的分組。因此UDP測試會比較關注丟包率的問題。Netperf能夠模擬兩種UDP的流量模式。
a.從client到server的單向批量傳輸。
b.請求/響應的交易模式。
注意:因爲UDP傳輸的不可靠性,在使用Netperf時要確保發送的緩衝區大小不能大於接收緩衝區大小,不然數據會丟失,Netperf測試結論丟包率會變得比實際大不少。
3.pktgen
pktgen工具,主要用來測試服務器自己在網卡方面的性能,考量服務器自己對包的處理能力-這也是上層協議和應用的性能基礎。事實上在全面測試中,經過dstat命令能夠發現,HTTP服務極限場景的收發包速度,和pktgen測試的結果是接近的。
pktgen是一個Linux內核模塊,經過CONFIG_NET_PKTGEN開關來控制編譯便可。pktgen運行的時候,會自動在設備的每一個CPU上都綁定運行一個線程,同時在procfs僞文件系統上生成狀態文件和控制文件。包括如下三種:
(1)/proc/net/pktgen/pgctrl
(2)/proc/net/pktgen/kpktgend_0
(3)/proc/net/pktgen/eth*
pktgen的全部配置和命令都是經過想procfs輸入指令來完成。
4.sysbench
sysbench是爲數據庫應用準備的系統測試工具,也就是說,影響數據庫性能的系統組件,包括CPU、內存、文件系統、進程調度和線程等,sysbench均可以對其進行測試。
項目地址:https://sourceforge.net/
(1)CPU性能測試
CPU測試主要測試的是計算能力,具體來講就是作質數的加法運算。命令以下:
sysbench --test=cpu --cpu-max-prime=20000 run
(2)文件I/O性能測試
前面說到過IOzone測試文件I/O。其實sysbench測試的要點大同小異,只是測試的I/O類型沒有那麼多。sysbench支持的I/O測試類型包括:seqwr(順序寫)、seqrewri(順序重寫)、seqrd(順序讀)、rndrd(隨機讀)、rndwr(隨機寫)和rndrw(隨機讀寫)等六種。
此外,在隨機讀寫測試模式下,還能夠指定讀寫操做和寫操做的百分比。測試須要先預設好指定大小文件。
(3)內存測試
內存測試中也能夠指定順序或者隨機讀寫模式,不過這裏最重要的是,指定的內存傳輸大小不能超過設備的實際內存大小!默認值爲100GB,顯然是大於通常設備的內存總量的。
(4)數據庫測試
sysbench中的oltp測試支持MySQL、Oracle和PostgreSQL三種數據庫,都須要在編譯的時候指定庫文件,而後在測試時經過"--db-driver"參數指定。若是編譯的時候只支持一種數據庫,那麼能夠忽略這個參數。
otp測試參數分爲兩部分:一部分是oltp相關參數,用於規劃最終造成的數據庫測試表的數據。最簡單的就是表的大小,這個默認值是10000條記錄。另外一部分是db-driver相關參數,用來完成數據庫鏈接,好比IP地址和端口、用戶名密碼,數據庫是MySQL的話還有特有的存儲引擎設定。MySQL數據庫性能基準測試工具還有不少,好比MySQL自帶的mysqlslap和Perl編寫的MyBench、Super-Smack等。Sysbench自動支持了事務處理測試,仍是比較方便的。
2、應用性能測試
網站應用除了數據庫以外,另外一個重要部分就是HTTP服務。尤爲是大規模擴展的狀況下,應用組件之間也大多采用HTTP接口相互調用,HTTP服務性能測試就更加劇要。這裏介紹三個各有優點的HTTP性能測試工具。
1.http_load
http_load是一個極爲簡單的小工具,它只利用單核單進程完成測試,能夠很放心地在服務器上使用。使用方面,在總結過運維最多見的需求後,http_load只提供兩對測試參數來隨機測試一組URL列表。在一些須要快速定位的場合中,很是實用。
官網地址:http://www.acme.com/software/http_load/
使用詳解:https://www.cnblogs.com/shijingjing07/p/6539179.html
2.AB(ApacheBench)
AB是Apache httpd項目自帶的測試工具。也是大多數運維人員最熟悉和最先接觸的HTTP服務性能測試工具。
AB對HTTP協議的支持比較全面,包括HEAD、GET、POST和PUT四種請求方式,以及自定義TCP收發緩衝的大小,自定義RequestHeader和Cookie,支持KeepAlive特性、HTTPS協議和WWW-Authentication認證等。不過AB只支持單個URL和併發請求/總請求數的測試模式(相對於http_load的-p/-f模式)。
AB的安裝和使用參考:https://www.cnblogs.com/Ryana/p/6279232.html
AB的使用詳解:https://www.cnblogs.com/xiaoyaowuming/p/5622660.html
3.weighttp
weighttp和AB相似,它是另外一款著名開源HTTP服務器Lighttpd項目下的性能測試工具。官網地址:http://redmine.lighttpd.net/projects/weighttp/wiki
weighttp目前的測試模式將不多。但做爲年齡比較小的項目,weighttp也有本身的特色-它底層使用libev庫。libev是一個性能比著名的libevent還要好一些的網絡事件驅動庫。因此weighttp自己的性能也很不錯。
安裝和使用:https://blog.csdn.net/yang382197207/article/details/19190089?locationNum=2&fps=1
3、分佈式測試環境
1.AutoBench
AutoBench是一個用Perl編寫的基於Httperf開發的分佈式測試系統。代碼量不大,使用也很簡單,咱們能夠從這個系統中學習如何構建一個分佈式測試環境。
官網地址:http://www.xenoclast.org/autobench/
AutoBench安裝和使用:https://www.cnblogs.com/Ryana/p/6279232.html
2.TCPCopy
TCPCopy的用途很廣,常見的應用場景以下:
(1)分佈式壓力測試:利用在線數據,能夠測試系統可以承受的壓力大小,也能夠提早發現一些bug。
(2)上線測試:能夠發現新系統是否穩定,提早發現上線過程當中會出現的諸多問題。
(3)對比測試:針對不一樣程序或相同程序的不一樣版本,使用相同的流量請求作性能對比。
(4)流量放大:能夠利用多種手段構造無限在線壓力,知足壓力測試要求。
(5)利用TCPCopy轉發傳統壓力測試工具發出的請求,能夠增長網絡延遲,使其壓力測試更加真實。
(6)熱備份
代碼託管地址:https://github.com/wangbin579/tcpcopy
TCPCopy安裝和使用:https://www.cnblogs.com/phennry/p/6382755.html?utm_source=itdadao&utm_medium=referral