1. 程式人生 > >jmeter壓測,並且用nmon進行記憶體分析

jmeter壓測,並且用nmon進行記憶體分析

壓測方法整理:

1.     寫jmx指令碼,整理csv資料檔案;

2.     部署測試環境,把jmx和csv放在壓測機,把監控指令碼nmon放被壓測機;

3.     安裝nmon:

b.     tar -zxvf nmon16d_x86.tar.gz  解壓

c.      檢視linux版本:uname -a,我的是el6,所以nmon版本採用:nmon_x86_64_rhel6

4.     執行nmon:./nmon_x86_64_rhel6 -s10 -c60 -f -m .    此時,會自動生成log檔案
 

-s10每 10 秒採集一次資料。

-c60採集 60 次,即為採集十分鐘的資料。

-f生成的資料檔名中包含檔案建立的時間。

-m生成的資料檔案的存放目錄。

這樣就會生成一個 nmon 檔案,並每十秒更新一次,直到十分鐘後。

生成的檔名如: _090824_1306.nmon ,"" 是這臺主機的主機名。

nmon-h檢視更多幫助資訊。

5.     執行jmeter進行壓測:sudo sh/home/apache-tomcat-jmeter/jmeter/bin/jmeter.sh -n -t/home/apache-tomcat-jmeter/bin/a/a.jmx-l log.jtl

6.     停止jmeter後停止nmon,匯出日誌檔案進行分析

日誌分析參考:http://blog.chinaunix.net/uid-29179844-id-4354563.html

--------------------- 本文來自 陽光薔薇 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/yanweihu/article/details/70859560?utm_source=copy

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

一、基本使用

nmon目前可支援AIX和LINUX,可到以下地址去免費下載:http://www-941.haw.ibm.com/collaboration/wiki/display/WikiPtype/nmon

nmon的使用比較簡單,不用安裝,直接將對應版本的安裝包放到伺服器上的某個目錄下,執行即可,例如:

# ./nmon_x86_rhel4

顯示CPU可按C,同樣,Memory—M,Network I/O----N, Disk I/O---D如下:

按q鍵可以退出nmon,但是此時的定位符有點亂,最好clear一下。

# ./nmon  –f  -s 30 –c 100

說明:-f 以檔案的形式輸出,預設輸出是機器名+日期.nmon的格式,也可以用-F指定輸出的檔名,例如: # ./nmon_x86_rhel4 –F test.nmon  -s 30 –c 100;

-s是取樣頻率,隔多長時間收集一次,這裡我指定的是30秒一次;

-c是取樣次數,一共要收集多少次,這裡我指定的是100次。

注意:這裡單次收集的檔案大小最多不能超過65K行(EXCEL裡的限制),大約是在nmon中 –c的值不超過330次就OK。

./nmon -f -s 10 -c 150

nmon生成的檔案比較大,建議每次收集的次數不要太多,若需要收集很長時間的資料,建議分開收集,也就是生成多個檔案,LINUX裡可以用建多個job的方式進行,例如:

先建立一個指令碼,例如命名為nmon.sh,如下:

#! /bin/sh

./nmon_x86_rhel4  -F 6326081116_6AM.nmon -s 60 -c 240
 給這個檔案授權:

 #chmod 777 nmon.sh

然後建一個job:

# at –f nmon.sh 6:00 January 16

執行完畢如下:

如果要建長期任務可以用crontab命令進行,建議一般不要用這個命令,否則很容易忘記你建過多少任務,造成後臺事務消耗資源。

分析:

將生成的.nmon檔案轉為excel能識別的.csv檔案,如下:

# sort  test.nmon > test.csv

生成的.csv檔案就可以放到windows平臺下進行分析了。

通常,我不太建議對穩定性測試用nmon監控,因為需要收集太多的資訊生成檔案較大,實際上,要對linux/unix的服務端資源進行效能監控,用vmstat和iostat這兩個命令去收集足夠了。

在/home/software/nmon

nmon.sh 10 1 

10指每10秒統計一次,1指共執行1分鐘, 每300次會新生成一個檔案

二、nmon大檔案處理

當監控的時間超過一定時間(如10個小時),產生的.nmon會很大約10M。這時,使用nmon analyser v34.xls分析nmon檔案會報錯。原因是記憶體不足。

解決方案:
1.將生成的.nmon檔案split成幾個小檔案。
如執行split -l 65500 result.nmon;
  其中65500表示行數;

2.生成得到的xaa、xab、xab等檔案。
在xaa檔案中找到第一次出現“ZZZZ”的那一行,將這一行以上(不包含這一行)的內容全部copy到xab、xac等檔案中。

3.給xaa、xab、xac等檔案加上字尾.nmon。

4.使用nmon analyser v33e3.xls繼續分析生成對應的excel檔案。

關於詳細的參考:http://www.cnblogs.com/ermao0927/p/3650422.html

摘取內容如下:

3.5.1 使用split命令

如何減小.nmon檔案的大小呢?其實作業系統已經提供了很有用的檔案分割命令,即split。

split是Linux/Unix自帶的系統命令,一般的使用語法如下:

split [-<行數>][-b <位元組>][-C <位元組>][-l <行數>][分割的檔名][輸出的檔名]

引數:

-<行數>或-l <行數> 指定每多少行要切成一個小檔案。

-b <位元組> 指定每多少位元組要切成一個小檔案。支援單位m,k。

-C <位元組> 與-b引數類似,但切割時儘量維持每行的完整性。

下面以一個大小為18M左右的8hours.nmon檔案為例,詳細介紹如何使用split命令把它分割成Nmon_analyser工具可以解析的檔案,並且最終合併成為一個完整的Excel報告。

首先登入Linux系統,在8hours.nmon檔案所在目錄下,執行“split -l 100000 8hours.nmon 8hours.nmon”命令,生成的檔案如下:

clip_image006_thumb[1]

可以看到,18M大小的結果檔案,分割成每個檔案10W行,總計生成5個子檔案。分割的子檔案個數不宜太多,子檔案太多的話,合併時工作量比較大;子檔案太少的話,單個子檔案過大,Nmon_analyser還是無法處理。

把生成的子檔案拷貝到Windows系統下,將子檔案匯入Nmon_analyser工具進行解析,第一個檔案8hours.nmonaa沒有問題,可以成功生成報告,但從第二個開始報錯,解析失敗。使用UltraEdit或其他文字工具開啟8hours.nmonaa和8hours.nmonab兩個檔案,比較它們的內容,發現第一個檔案裡面有完整的標頭檔案:

clip_image008_thumb[1]

第二個檔案裡面只有資料檔案,沒有標頭檔案:

clip_image010_thumb[1]

按照第3.1節的介紹,沒有標頭檔案的.nmon是無法被解析的,處理的方法也很簡單,把標頭檔案拷貝到除了第一個檔案外的所有檔案即可。需要注意的標頭檔案的內容有哪些,我們看一下第一個檔案的內容:

clip_image012_thumb[1]

從上圖可以看到,從第1002行開始,已經是具體的監控資料資訊了,所以從第1行到1001行就是標頭檔案的內容,將該內容拷貝到其他幾個.nmon檔案中,然後使用解析工具Nmon_anaylzer生成子報告。

開啟生成的Excel報告檔案,發現監控的各個時間點都變成無法識別的數字,如下圖:

clip_image014_thumb[1]

再次檢查各個子檔案的區別,發現由於之前把一個監控資料檔案分割成了多個,所以每個資料檔案都不是完整的,雖然添加了標頭檔案,但是除了第一個檔案外,其他檔案的起始時間可能是在上一個子檔案裡的,所以就造成了子檔案無法獲取監控時間起點的問題。比如第一個結果檔案最後的資料如下:

clip_image016_thumb[1]

第二個結果檔案最開始的資料如下圖:

clip_image018_thumb[1]

注意上圖的第一行,只有監控資料,沒有監控時間,這樣在Nmon_analyser解析該檔案時,由於沒有監控的起始時間,導致後面的監控時間出現混亂,所以除了第一個子檔案外,後面每個子檔案都需要新增監控的起始時間。方法是將前一個數據檔案最後一次出現的時間資料直接拷貝到當前檔案第一行(不包括標頭檔案)即可。

所有的子檔案都生成結果報告後,下面的工作就是合併各個報告,生成一個完整的監控結果報告。根據目前實驗室效能測試報告的資料要求,僅進行CPU和記憶體資料的合併。

CPU資料的合併涉及SYS_SUMM和CPU_ALL兩個sheet,首先按照資料產生的先後順序,把所有子檔案CPU_ALL的資料拷貝到第一個子檔案的CPU_ALL,記錄拷貝之後的資料總行數,本例中是3061行,同時計算各列的平均值和最大值(實際按照報告要求,只計算CPU%一列即可),如下圖:

clip_image020_thumb[1]

SYS_SUMM中的CPU的AVG和MAX值即來自上圖中的資料。下面介紹如何生成SYS_SUMM中的CPU座標圖,在拷貝所有CPU_ALL的資料到第一個子檔案之後,檢視SYS_SUMM中的CPU座標圖:

clip_image022_thumb[1]

可以看到,橫軸的時間沒有變化,還是第一個子檔案的時段,需要根據CPU_ALL的資料進行調整,直接點選CPU曲線,可以看到sheet表格上方出現了CPU曲線的生成公式:

clip_image024_thumb[4]

顯然曲線的生成公式沒有包含合併的CPU資料,所以需要修改公式,修改最大行數為合併後的行數,即3061行,修改後的公式如下:

=SERIES(CPU_ALL!$F$1,CPU_ALL!$A$2:$A$3061,CPU_ALL!$F$2:$F$3061,1)

生成的CPU曲線圖如下:

clip_image026_thumb[1]

可以看到,曲線圖已經包含了所有的CPU監控資料,再修改Avg和Max的值為實際值,即完成了CPU監控資料的整合。

記憶體監控資料的合併比較簡單,將所有的資料拷貝到第一個子檔案中名為MEM的sheet中,然後計算Max、Min和Average的值即可。

3.5.2 使用文字編輯器

在實際的工作中,還有一種比較簡單的替代split的方法。由於.nmon是一種類.txt格式的檔案,所以可以使用市面常用的txt編輯器直接開啟進行分割和編輯。這裡不用windows自帶的txt工具開啟是因為.nmon檔案一般都比較大,開啟比較慢,而且自帶的txt工具編輯功能較差,不推薦使用,建議使用Ultraedit或Editplus等工具。

另外,之所以把split命令作為第一種解決問題的方法,是因為在外出工作時,客戶的辦公場所很可能限制外來U盤和外網的接入,所以如果測試機上未安裝Ultraedit或Editplus等編輯工具,使用Linux/Unix自帶的split命令便成了第一選擇。

3.6 規避方法

遇到問題時,如果暫時無法解決,在以後的工作中嘗試規避問題,也是解決問題的一種方式。在使用Nmon命令列收集系統資源時,加大收集資料的間隔,從而減小收集頻率,就能控制生成的資料檔案的規模,從而規避無法生成結果檔案的問題。但是在實際操作時,由於測試時間、測試環境及操作等很多原因,生成大檔案有時無法避免,所以掌握處理大檔案的方法還是很有必要的。

對多臺linux伺服器使用nmon如何監控,伺服器數量多時,每臺機器都執行nmon命令會比較麻煩。方法比較多。

1、shell指令碼,各伺服器之間建立信任關係。

2、負載機上使用ant工具,在build.xml檔案中配置各伺服器的資訊。可實現對遠端伺服器的nmon命令的執行,nmon檔案的下載與刪除。

3、手工編寫工具實現。

看到一篇文章介紹如何使用nmon對程序監控的,個人未實踐過。這裡只做下備份:資源監控_自己編寫一個nmon