性能測試如何定位瓶頸

服務器性能監控:

Nmon介紹
Nmon 工具是 IBM 提供的免費的在AIX與各種Linux操作系統上廣泛使用的監控與分析工具。該工具可將服務器的系統資源耗用情況收集起來並輸出一個特定的文件,並可利用 excel 分析工具nmonanalyser進行數據的統計分析。並且,nmon運行不會佔用過多的系統資源,通常情況下CPU利用率不會超過2%。針對不同的操作 系統版本,nmon有相應版本的程序。

nmon是linux下一款非常好用的工具,他有以下功能:
CPU 使用率
內存使用情況
內核統計信息和運行隊列信息
磁盤 I/O 速度、傳輸和讀/寫比率
文件系統中的可用空間
磁盤適配器
網絡 I/O 速度、傳輸和讀/寫比率
頁面空間和頁面速度
CPU 和 AIX 規範
消耗資源最多的進程
IBM HTTP Web 緩存
用戶自定義的磁盤組
計算機詳細信息和資源
異步 I/O,僅適用於 AIX
工作負載管理器 (WLM),僅適用於 AIX
IBM TotalStorage® Enterprise Storage Server® (ESS) 磁盤,僅適用於 AIX
網絡文件系統 (NFS)
動態 LPAR (DLPAR) 更改,僅適用於面向 AIX 或 Linux 的 pSeries p5 和 OpenPower
還包括一個用來從 nmon 的輸出生成圖形並創建可以在 Web 站點顯示的 .gif 文件的新工具。



Nmon安裝及使用
上傳nmon_linux_14i.tar.gz到/usr/local/src文件夾下。
執行以下操作:
[root@localhost /]# mkdir -p /usr/local/nmon
[root@localhost /]# cp -a /usr/local/src/nmon_linux_14i.tar.gz  /usr/local/nmon
[root@localhost /]#  /usr/local/nmon
[root@localhost nmon]# tar -zxvf  nmon_linux_14i.tar.gz
[root@localhost nmon]# ./nmon_x86_64_sles11     //啓動
說明:
按C顯示CPU信息,再按一次C關閉
按M顯示內存
按N顯示網絡
按D顯示硬盤
使用 -f 命令可以將 nmon 的執行結果保存到一個 CSV 文件中,用於日後分析。
更多功能可以輸入h查看。

其他說明,如果在任意目錄執行 ./nmon即可開啓監控功能的話,需要把nmon_x86_64_sles11 目錄拷貝到bin目錄下,具體操作如下
[root@localhost nmon]# cp nmon_linux_x86_64  nmon
[root@localhost nmon]#cp nmon /bin/nmon
[root@localhost nmon]#cp nmon /usr/bin/nmon
[root@localhost nmon]#cp nmon /usr/local/bin/nmon

[root@localhost nmon]#nmon  //就可以啓動監控程序  可以直接運行nmon



以上Nmon配置成功後,Nmon工具使用比較簡單,在nmon 目錄下或者其他任意目錄,輸入nmon
[root@localhost nmon]#nmon
1.jpg

出現此畫面,說明已安裝成功。
輸入c可顯示CPU的信息,“m”對應內存、“n”對應網絡,“d”可以查看磁盤信息;“t”可以查看系統的進程信息;“
2.jpg



數據採集
以上實現的是對服務器的實時監控,在實際的性能測試中我們需要把一段時間之內的數據記錄下來,可以使用如下命令
[root@localhost nmon]#nmon  –f –t –r test –s 30 –c 10

上面命令的含義是:
-f :按標準格式輸出文件名稱:<hostname>_YYYYMMDD_HHMM.nmon
-t 輸出最耗資源的進程
-s :每隔n秒抽樣一次,這裏爲30秒
-c :取出多少個抽樣數量,這裏爲10,即監控=10*30/60=5分鐘

test:監控記錄的標題
該命令啓動後,會在nmon所在目錄下生成監控文件,並持續寫入資源數據,直至360個監控點收集完成——即監控1小時,這些操作均自動完成,無需手工幹 預,測試人員可以繼續完成其他操作。如果想停止該監控,需要通過“#ps –ef|grep nmon”查詢進程號,然後殺掉該進程以停止監控。

nmon 輸出文件的命名方式是服務器名_日期時間.nmon

其他信息:[root@dhdb ~]# nmon -s 300 -c 288 -f -m /tmp
-s 300:表示每300秒採集一次數據,
-c 288 :表示採集288次,300*288=86400秒,剛好是1天的數據,這樣運行一次這個程序就會生成一個一天的數據文件,
-m /tmp: 表示生成的數據文件的路徑
-f :表示生成的數據文件名中有時間
當然我們也可以讓其自動監控,每天一個文件夾,每小時一個文件,每分鐘或5分採樣一次

通過以下命令,將.nmon文件轉化成.csv文件,在當前目錄生成對應的.csv文件
[root@localhost tmp]# sort localhost_140616_0737.nmon>localhost_140616_0737.csv
將localhost_140616_0737.csv文件下載到本地



nmon analyser工具應用
1) 下載後打開nmon analyser v33g.xls。下載文件見附件

2) 調整excel宏的安全級別,調整爲最低或者如下操作
3.jpg

3) 然後點擊Analyser nmon data 按鈕,選擇下載下來的.csv文件,然後就會轉化成.excel文件,生成圖形化的文件,例如:
4.jpg

基於命令行的性能監控工具

1. dstat - 多類型資源統計工具

該命令整合了vmstatiostatifstat三種命令。同時增加了新的特性和功能可以讓你能及時看到各種的資源使用情況,從而能夠使你對比和整合不同的資源使用情況。通過不同顏色和區塊佈局的界面幫助你能夠更加清晰容易的獲取信息。它也支持將信息數據導出到cvs格式文件中,從而用其他應用程序打開,或者導入到數據庫中。你可以用該命令來監控cpu,內存和網絡狀態隨着時間的變化

25 個 Linux 性能監控工具


5. sar - 性能監控和瓶頸檢查

sar 命令可以將操作系統上所選的累積活動計數器內容信息輸出到標準輸出上。其基於計數值和時間間隔參數的審計系統,會按照指定的時間間隔輸出指定次數的監控信息。如果時間間隔參數爲設置爲0,那麼sar命令將會顯示系統從開機到當時時刻的平均統計信息。有用的命令如下:

# sar -u 2 3
# sar -u -f /var/log/sa/sa05
# sar -P ALL 1 1
# sar -r 1 3
# sar -W 1 3

6. Saidar - 簡單的統計監控工具

Saidar是一個簡單輕量的系統信息監控工具。雖然它無法提供大多性能報表,但是它能夠通過一個簡單明瞭的方式顯示最有用的系統運行狀況數據。你可以很容易地看到運行時間、平均負載、CPU、內存、進程、磁盤和網絡接口統計信息。

Usage: saidar [-d delay] [-c] [-v] [-h]

-d 設置更新時間(秒)
-c 彩色顯示
-v 顯示版本號
-h 顯示本幫助

25 個 Linux 性能監控工具


8. Sysdig - 系統進程的高級視圖

Sysdig是一個能夠讓系統管理員和開發人員以前所未有方式洞察其系統行爲的監控工具。其開發團隊希望改善系統級的監控方式,通過提供關於存儲,進程,網絡和內存子系統的統一有序以及粒度可見的方式來進行錯誤排查,並可以創建系統活動記錄文件以便你可以在任何時間輕鬆分析。

簡單例子:

# sysdig proc.name=vim
# sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
# sysdig evt.type=chdir and user.name=root
# sysdig -l
# sysdig -L
# sysdig -c topprocs_net
# sysdig -c fdcount_by fd.sport "evt.type=accept"
# sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
# sysdig -c topprocs_file
# sysdig -c fdcount_by proc.name "fd.type=file"
# sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
# sysdig -c topprocs_cpu
# sysdig -c topprocs_cpu evt.cpu=0
# sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"
# sysdig evt.type=open and fd.name contains /etc

25 個 Linux 性能監控工具


9. netstat - 顯示開放的端口和連接

它是Linux管理員使用來顯示各種網絡信息的工具,如查看什麼端口開放和什麼網絡連接已經建立以及何種進程運行在該連接之上。同時它也顯示了不同程序間打開的Unix套接字的信息。作爲大多數Linux發行版本的一部分,netstat的許多命令在netstat和它的不同輸出中有詳細的描述。最爲常用的如下:

$ netstat | head -20
$ netstat -r
$ netstat -rC
$ netstat -i
$ netstat -ie
$ netstat -s
$ netstat -g
$ netstat -tapn

10. tcpdump - 洞察網絡封包

tcpdump可以用來查看網絡連接封包內容。它顯示了傳輸過程中封包內容的各種信息。爲了使得輸出信息更爲有用,它允許使用者通過不同的過濾器獲取自己想要的信息。可以參照的例子如下:

# tcpdump -i eth0 not port 22
# tcpdump -c 10 -i eth0
# tcpdump -ni eth0 -c 10 not port 22
# tcpdump -w aloft.cap -s 0
# tcpdump -r aloft.cap
# tcpdump -i eth0 dst port 80

你可以文章“在topdump和捕捉包”中找到詳細描述。

11. vmstat - 虛擬內存統計信息

vmstat是虛擬內存(virtual memory statistics)的縮寫,作爲一個內存監控工具,它收集和顯示關於內存進程終端分頁I/O阻塞的概括信息。作爲一個開源程序,它可以在大部分Linux發行版本中找到,包括Solaris和FreeBSD。它用來診斷大部分的內存性能問題和其他相關問題。

25 個 Linux 性能監控工具

M更多信息 參考 vmstat命令文章

12. free - 內存統計信息

free是另一個能夠在終端中顯示內存和交換空間使用的命令行工具。由於它的簡易,它經常用於快速查看內存使用或者是應用於不同的腳本和應用程序中。在這裏你可以看到這個小程序的許多應用。幾乎所有的系統管理員日常都會用這個工具。:-)

25 個 Linux 性能監控工具

13. Htop - 更加友好的top

Htop基本上是一個top改善版本,它能夠以更加多彩的方式顯示更多的統計信息,同時允許你採用不同的方式進行排序,它提供了一個用戶友好的接口。

25 個 Linux 性能監控工具

你可以在文章“關於htop和top的比較”中找到更多的信息 。


15. lsof - 列表顯示打開的文件

lsof命令,意爲“list open files”, 用於在許多類Unix系統中顯示所有打開的文件及打開它們的進程。在大部分Linux發行版和其他類Linux操作系統中系統管理員用它來檢查不同的進程打開了哪些文件。

# lsof +p process_id
# lsof | less
# lsof –u username
# lsof /etc/passwd
# lsof –i TCP:ftp
# lsof –i TCP:80

你可以找到 更多例子 在lsof 文章

16. iftop - 類似top的了網絡連接工具

iftop是另一個基於網絡信息的類似top的程序。它能夠顯示當前時刻按照帶寬使用量或者上傳或者下載量排序的網絡連接狀況。它同時提供了下載文件的預估完成時間。

25 個 Linux 性能監控工具

更多信息可以參考網絡流量iftop文章


17. iperf - 網絡性能工具

iperf是一個網絡測試工具,能夠創建TCPUDP數據連接並在網絡上測量它們的傳輸性能。它支持調節關於時間,協議和緩衝等不同的參數。對於每一個測試,它會報告帶寬,丟包和其他的一些參數。

25 個 Linux 性能監控工具

如果你想用使用這個工具,可以參考這篇文章: 如何安裝和使用iperf

18. Smem - 高級內存報表工具

Smem是最先進的Linux命令行工具之一,它提供關於系統中已經使用的和共享的實際內存大小,試圖提供一個更爲可靠的當前內存使用數據。

$ smem -m
$ smem -m -p | grep firefox
$ smem -u -p
$ smem -w -p

參考我們的文章:Smem更多的例子

圖形化或基於Web的性能工具

19. Icinga - Nagios的社區分支版本

Icinga是一個開源免費的網絡監控程序,作爲Nagios的分支,它繼承了前者現有的大部分功能,同時基於這些功能又增加了社區用戶要求已久的功能和補丁。

25 個 Linux 性能監控工具

更多信息請參考安裝和配置lcinga文章

20. Nagios - 最爲流行的監控工具

作爲在Linux上使用最爲廣泛和最爲流行的監控方案,它有一個守護程序用來收集不同進程和遠程主機的信息,這些收集到的信息都通過功能強大的web界面進行呈現。

25 個 Linux 性能監控工具

你可以在文章“如何安裝nagios”裏面找到更多的信息

21. Linux process explorer - Linux下的procexp

Linux process explorer是一個Linux下的圖形化進程瀏覽工具。它能夠顯示不同的進程信息,如進程數,TCP/IP連接和每一個進程的性能指標。作爲Windowsprocexp在Linux的替代品,是由Sysinternals開發的,其目標是比topps提供更好用戶體驗。

25 個 Linux 性能監控工具

查看 linux process explorer 文章獲取更多信息。

22. Collectl - 性能監控工具

你可以既可以通過交互的方式使用這個性能監控工具,也可以用它把報表寫到磁盤上,並通過web服務器來訪問。它以一種易讀易管理的格式,顯示了CPU,磁盤,內存,網絡,網絡文件系統,進程,slabs等統計信息。

25 個 Linux 性能監控工具

更多 關於Collectl的文章

23. MRTG - 經典網絡流量監控圖形工具

這是一個採用rrdtool的生成圖形的流量監控工具。作爲最早的提供圖形化界面的流量監控工具,它被廣泛應用在類Unix的操作系統中。查看我們關於如何使用MRTG的文章獲取更多關於安裝和配置的信息。

25 個 Linux 性能監控工具

24. Monit - 簡單易用的監控工具

Monit是一個用來監控進程系統加載文件系統目錄文件等的開源的Linux工具。你能夠讓它自動化維護和修復,也能夠在運行錯誤的情景下執行特定動作或者發郵件報告提醒系統管理員。如果你想要用這個工具,你可以查看如何使用Monit的文章

25 個 Linux 性能監控工具

25. Munin - 爲服務器提供監控和提醒服務

作爲一個網絡資源監控工具,Munin能夠幫助分析資源趨勢查看薄弱環節以及導致產生性能問題的原因。開發此軟件的團隊希望它能夠易用和用戶體驗友好。該軟件是用Perl開發的,並採用rrdtool來繪製圖形,使用了web界面進行呈現。開發人員推廣此應用時聲稱當前已有500多個監控插件可以“即插即用*”。

25 個 Linux 性能監控工具更多信息可以在關於Munin的文章

性能測試這種測試方式在發生過程中,其中一個過渡性的工作,就是對執行過程中的問題,進行定位,對功能的定位,對負載的定位,最重要的,當然就是問題中說的“瓶頸”,接觸性能測試不深,更非專家,自己的理解,瓶頸產生在以下幾方面:

  1、網絡瓶頸,如帶寬,流量等形成的網絡環境

  2、應用服務瓶頸,如中間件的基本配置,CACHE等

  3、系統瓶頸,這個比較常用:應用服務器,數據庫服務器以及客戶機的CPU,內存,硬盤等配置

  4、數據庫瓶頸,以ORACLE爲例,SYS中默認的一些參數設置

  5、應用程序本身瓶頸,這個是測試過程中最需要去關注的,需要測試人員和開發人員配合執行,然後定位

逐步細化分析,先可以監控一些常見衡量CPU,內存,磁盤的性能指標,進行綜合分析,然後根據所測系統具體情況,進行初步問題定位,然後確定更詳細的監控指標來分析。

  懷疑內存不足時:

  方法1:

  【監控指標】:Memory Available MBytes ,Memory的Pages/sec, page read/sec, Page Faults/sec

  【參考值】:

  如果 Page Reads/Sec 比率持續保持爲 5,表示可能內存不足。

  Page/sec 推薦00-20(如果服務器沒有足夠的內存處理其工作負荷,此數值將一直很高。如果大於80,表示有問題)。

        方法2:根據Physical Disk 值分析性能瓶頸

  【監控指標】:Memory Available MBytes ,Pages read/sec,%Disk Time 和 Avg.Disk Queue Length

  【參考值】:%Disk Time建議閾值90%

  當內存不足時,有點進程會轉移到硬盤上去運行,造成性能急劇下降,而且一個缺少內存的系統常常表現出很高的CPU利用率,因爲它需要不斷的掃描內存,將內存中的頁面移到硬盤上。

  懷疑內存泄漏時

  【監控指標】:Memory Available MBytes ,Process\Private Bytes和Process\Working Set,PhysicalDisk/%Disk Time

  【說明】:

  Windows資源監控中,如果Process\Private Bytes計數器和Process\Working Set計數器的值在長時間內持續升高,同時Memory\Available bytes計數器的值持續降低,則很可能存在內存泄漏。內存泄漏應該通過一個長時間的,用來研究分析當所有內存都耗盡時,應用程序反應情況的測試來檢驗。

  CPU分析

  【監控指標】:

  System %Processor Time CPU,Processor %Processor Time CPU

  Processor%user time 和Processor%Privileged Time

  system\Processor Queue Length

  Context Switches/sec 和%Privileged Time

  【參考值】:

  System\%Total processor time不持續超過90%,如果服務器專用於SQL Server,可接受的最大上限是80-85% ,合理使用的範圍在60%至70%。

  Processor %Processor Time小於75%

  system\Processor Queue Length值,小於CPU數量的總數+1

  CPU瓶頸問題

  1、System\%Total processor time如果該值持續超過90%,且伴隨處理器阻塞,則說明整個系統面臨着處理器方面的瓶頸.

  注:在某些多CPU系統中,該數據雖然本身並不大,但CPU之間的負載狀況極不均衡,此時也應該視作系統產生了處理器方面的瓶頸.

  2、排除內存因素,如果Processor %Processor Time計數器的值比較大,而同時網卡和硬盤的值比較低,那麼可以確定CPU 瓶頸。(內存不足時,有點進程會轉移到硬盤上去運行,造成性能急劇下降,而且一個缺少內存的系統常常表現出很高的CPU利用率,因爲它需要不斷的掃描內存,將內存中的頁面移到硬盤上。)

        造成高CPU使用率的原因:

  頻繁執行程序,複雜運算操作,消耗CPU嚴重

  數據庫查詢語句複雜,大量的 where 子句,order by, group by 排序等,CPU容易出現瓶頸

  內存不足,IO磁盤問題使得CPU的開銷增加

  磁盤I/O分析

  【監控指標】:PhysicalDisk/%Disk time,PhysicalDisk/%Idle Time,Physical Disk\ Avg.Disk Queue Length, Disk sec/Transfer

  【參考值】:%Disk Time建議閾值90%

  Windows資源監控中,如果% Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec頁面讀取操作速率很低,則可能存在磁盤瓶徑。

  Processor%Privileged Time該參數值一直很高,且如果在 Physical Disk 計數器中,只有%Disk time 比較大,其他值都比較適中,硬盤可能會是瓶頸。若幾個值都比較大, 那麼硬盤不是瓶頸。若數值持續超過80%,則可能是內存泄露。如果 Physical Disk 計數器的值很高時該計數器的值(Processor%Privileged Time)也一直很高, 則考慮使用速度更快或效率更高的磁盤子系統。

  Disk sec/Transfer 一般來說,該數值小於15ms爲最好,介於15-30ms之間爲良好,30-60ms之間爲可以接受,超過60ms則需要考慮更換硬盤或是硬盤的RAID方式了.

  ---------------------------------------------

  Average Transaciton Response Time(事務平均響應時間)隨着測試時間的變化,系統處理事務的速度開始逐漸變慢,這說明應用系統隨着投產時間的變化,整體性能將會有下降的趨勢

  Transactions per Second(每秒通過事務數/TPS)當壓力加大時,點擊率/TPS曲線如果變化緩慢或者有平坦的趨勢,很有可能是服務器開始出現瓶頸

  Hits per Second(每秒點擊次數)通過對查看“每秒點擊次數”,可以判斷系統是否穩定。系統點擊率下降通常表明服務器的響應速度在變慢,需進一步分析,發現系統瓶頸所在。

  Throughput(吞吐率)可以依據服務器的吞吐量來評估虛擬用戶產生的負載量,以及看出服務器在流量方面的處理能力以及是否存在瓶頸。

  Connections(連接數)當連接數到達穩定狀態而事務響應時間迅速增大時,添加連接可以使性能得到極大提高(事務響應時間將降低)

  Time to First Buffer Breakdown(Over Time)(第一次緩衝時間細分(隨時間變化))可以使用該圖確定場景或會話步驟運行期間服務器或網絡出現問題的時間。

        碰到過的性能問題:

  1. 在高併發的情況下,產生的處理失敗(比如:數據庫連接池過低,服務器連接數超過上限,數據庫鎖控制考慮不足等)

  2. 內存泄露(比如:在長時間運行下,內存沒有正常釋放,發生宕機等)

  3. CPU使用偏離(比如:高併發導致CPU使用率過高)

  4. 日誌打印過多,服務器無硬盤空間

  如何定位這些性能問題:

  1. 查看系統日誌,日誌是定位問題的不二法寶,如果日誌記錄的全面,很容易通過日誌發現問題。

  比如,系統宕機時,系統日誌打印了某方法執行時拋出out of memory的錯誤,我們就可以順藤摸瓜,很快定位到導致內存溢出的問題在哪裏。

  2. 利用性能監控工具,比如:JAVA開發B/S結構的項目,可以通過JDK自帶的Jconsole,或者JProfiler,來監控服務器性能,Jconsole可以遠程監控服務器的CPU,內存,線程等狀態,並繪製變化曲線圖。

  利用Spotlight可以監控數據庫使用情況。

  我們需要關注的性能點有:CPU負載,內存使用率,網絡I/O等

  3. 工具和日誌只是手段,除此之外,還需要設計合理的性能測試場景

  具體場景有:性能測試,負載測試,壓力測試,穩定性測試,浪涌測試等

  好的測試場景,能更加快速的發現瓶頸,定位瓶頸

  4. 瞭解系統參數配置,可以進行後期的性能調優

        最後要說的是:做性能測試的時候,我們一定要確保瓶頸不要發生在我們自己的測試腳本和測試工具上。




性能問題服務器、主機、應用、代碼、數據庫、網絡等各種影響,所以要定位問題是不容易的。最好是使用監測的工具,從IT環境的整體佈局來考慮,定位到性能的瓶頸。zabbix、newrelix,國內的監控寶都可以考慮。

&amp;lt;img src=&quot;https://pic4.zhimg.com/cbb4e690554d971cad94287bc6f6fde7_b.png&quot; data-rawwidth=&quot;812&quot; data-rawheight=&quot;419&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;812&quot; data-original=&quot;https://pic4.zhimg.com/cbb4e690554d971cad94287bc6f6fde7_r.png&quot;&amp;gt;當然,如果知道一些數據標準的話,對定位性能瓶頸是非常有幫助的。還是可以從第三方的工具中獲得一些標準。比如這個:當然,如果知道一些數據標準的話,對定位性能瓶頸是非常有幫助的。還是可以從第三方的工具中獲得一些標準。比如這個:

&amp;lt;img src=&quot;https://pic3.zhimg.com/2dd80a93014524ddac29020610936512_b.png&quot; data-rawwidth=&quot;874&quot; data-rawheight=&quot;168&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;874&quot; data-original=&quot;https://pic3.zhimg.com/2dd80a93014524ddac29020610936512_r.png&quot;&amp;gt;

這張表是我從監控寶抄下來的有關響應時間的閾值。從一定程度上可以反應用戶的容忍程度,若測試是發現響應時間超出了這個範圍,就是你的瓶頸了,改做相應的改善。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章