概述
前段時間講述了Jmeter利用插件PerfMon Metrics Collector來監控壓測過程中服務器資源的消耗。
一個偶然機會,我發現nmon這個工具挺不錯。nmon,一款開源性能監控工具,用于監控linux系統的資源消耗信息,并能把結果輸出到文件中,然后通過nmon_analyser工具產生數據文件與圖形化結果。
和Jmeter插件比起來,nmon記錄的信息更加全面一些。
nmon的下載安裝
nmon下載地址:
http://nmon.sourceforge.net/pmwiki.php
nmon analyser下載地址:
http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser
nmon根據自己系統版本下載對應的安裝包,本次測試使用的是
nmon16m_helpsystems.tar.gz ,nmon analyser下載最新的安裝包,本次測試使用的是 nmon_analyser_v66.zip 。
1.將下載的nmon安裝包上傳到Linux新建目錄并解壓:
[test@node06 ~]$ cd /usr/local
[test@node06 local]$ mkdir nmon
[test@node06 local]$ cd nmon
[test@node06 nmon]$ tar -zxvf nmon16m_helpsystems.tar.gz
2.根據自己系統的版本,給命令賦予可執行權限:
1 [test@node06 nmon]$ cat /etc/redhat-release
2 centos release 6.9 (Final)
3 [test@node06 nmon]$ chmod +x nmon_x86_64_centos6
3.在命令行輸入 ./nmon_x86_64_centos6 即可打開nmon界面。
在上面的交互式窗口中,可以使用nmon 快捷鍵來顯示不同的系統資源統計數據:
q : 停止并退出 Nmon
h : 查看幫助
c : 查看 CPU 統計數據
m : 查看內存統計數據
d : 查看硬盤統計數據
k : 查看內核統計數據
n : 查看網絡統計數據
N : 查看 NFS 統計數據
j : 查看文件系統統計數據
t : 查看高耗進程
V : 查看虛擬內存統計數據
v : 詳細模式
此時,我們可以通過快捷鍵來調取關心的系統資源進行顯示,該種方式顯示信息實時性強,能夠及時掌握系統承受壓力下的運行情況。
配置nmon的環境變量
完成以上的配置后,已經可以正常使用nmon了。但是,大家有沒有發現一個問題,那就是我們想使用nmon時必須找到該命令的詳細路徑才能使用,這樣就很不方便了。此時,我們需要將nmon的命令添加到系統環境變量中去,以后我們就可以在任何地方使用該命令。
1.修改啟動文件名稱,讓名稱簡單化,修改完成執行一次試試:
[test@node06 nmon]$ mv nmon_x86_64_centos6 nmon
[test@node06 nmon]$ ./nmon
2.在命令行輸入 vim /etc/profile ,將以下內容粘貼到文本末尾,路徑要改為自己的安裝路徑:
PATH=$PATH:/usr/local/nmon
export PATH
3.在命令行輸入 source /etc/profile 使配置生效,此時,可以在任意目錄執行 nmon 命令來啟動nmon。
監控
我們使用nmon來監控Jmeter壓測期間的系統資源消耗情況。
1.在nmon目錄下新建logs文件夾,用來存放監控文件:
[test@node06 ~]$ cd /usr/local/nmon/
[test@node06 nmon]$ mkdir logs
2.在命令行輸入執行命令:nmon -s 1 -c 80 -f -m /usr/local/nmon/logs。
參數說明:
-s 1:每隔n秒抽樣一次,這里為1秒
-c 80:取出多少個抽樣數量,這里為80,即監控=1*80/60=1分鐘20秒
-f:按標準格式輸出文件名稱:<hostname>_YYMMDD_HHMM.nmon
-m:指定監控文件的存放目錄,-m后跟指定目錄,如果不指定目錄會在該命令的源目錄下生成相應的監控文件
此命令啟動后,會在我們指定的目錄下生成監控文件,并持續寫入資源數據,直至80個監控點收集完成。
在此期間,測試人員不需要去手動干預。如果想停止監控,查詢進程號,然后殺死該進程即可。
[test@node06 ~]$ ps -ef|grep nmon
test 8863 1 0 17:05 pts/1 00:00:00 nmon -s 1 -c 120 -f -m /usr/local/nmon/logs/
test 9111 25160 0 17:07 pts/1 00:00:00 grep nmon
[test@node06 ~]$ kill 8863
-bash: kill: (8863) - No such process
這里因為nmon已運行結束,所以當我kill的時候會提示 No such process 。
3.運行Jmeter腳本,直至腳本運行結束。
本次壓測只為了講述使用流程,測試結果中TPS不具實際意義,為避免不必要的爭議,這里將其馬賽克了。
查看和分析壓測結果
1.將生成的監控文件下載到本地。
2.將本地的 nmon_analyser_v66.zip 解壓,解壓后的文件夾內有.pdf和.xlsm兩個文件,我們打開.xlsm文件。
3.點擊Analyse nomn data按鈕,將下載到本地的監控文件添加進去,最后會生成一個.xlsx文件,這個文件里就是我們需要的數據報告。
注意:nmon analyser需要借助Excel的宏,wps默認沒有安裝宏,即使安裝了插件也容易出現異常情況,建議使用Microsoft Excel工作表。
宏語言 Visual Basic for Application(VBA). Visual Basic是windows環境下開發應用軟件的一種通用程序設計語言,功能強大,簡便易用。
VBA是它的一個子集,可以廣泛地應用于Microsoft公司開發的各種軟件中,例如word、Excel、Access等。
4.需要關注的一些數據。
1)CPU_ALL,是服務器cpu使用率的詳細數據。
User%:顯示在用戶模式下執行的程序所使用的 CPU 百分比。
Sys%:顯示在內核模式下執行的程序所使用的 CPU 百分比。
Wait%:顯示等待 IO 所花的時間百分比。
Idle%:顯示 CPU 的空閑時間百分比。
有效行:由于nmon啟動時間未必是應用平穩的時間,同時nmon監控時間段也許比應用施壓的要長。所以nmon的結果里常常存在一些明顯不合理的數據,比如前幾次結果的CPU等占用明顯低于中段的平均數據,或者后面幾次采樣結果很小,對于這樣的數據我們在分析的時候要予以過濾。
2)MEM,是服務器內存使用率的概況。
在MEM表里面使用如下公式計算出每行的內存使用率并進行取平均:(Memtotal - Memfree - cached - buffers)/Memtotal * 100即( =(B2-F2-K2-N2)/B2*100)。
通過分析內存使用率的趨勢,可定位是否內存泄露情況。
有人看到內存使用率是99%,就認為內存用滿了,并沒有區分內存分頁是什么類型,這樣武斷的說內存用滿了是不科學的。在AIX上主要關注的是計算內存占整個物理內存的百分比,linux上主要關注的是active內存占整個物理內存的百分比。
3)Disk_SUMM,總體disk讀、寫以及I/O操作。
Disk Read kb/s 每個磁盤執行采樣數據;(磁盤設備的讀速率)
Disk Write kb/s 每個磁盤執行采樣數據;(磁盤設備的寫速率)
IO/sec 每秒進行的IO數(一次IO就是控制操作一次讀或寫,IO塊就是讀或寫的大小),圖中為上方黑色的線,報告中寫的是這個參數的值。
4)NET,網絡:
Total read 每秒接收到的千字節的數目,如圖藍色部分;Total write 每秒發送的千字節的數目,如圖橙色部分。
網絡=Total read-Total write。
網絡的指標一般要根據設備來確定,百兆網卡的意思是每秒能夠傳輸的網絡流量是100Mbps,即最大的下載速度是12.5MB/s,一般服務器是千兆網卡,即125MB/s。