iT邦幫忙

0

JMeter執行到一半就消失了~

匿名 2013-11-17 12:04:106163 瀏覽

最近使用JMeter(版本:2.10)在測試網頁效能的部份,發現到我設定550個後,JMeter軟體就會自已消失在桌面上,然後CPU跟記憶體也會瞬間變的很閒~~~
因為JMeter是java寫的,所以我上網查了一些關於JVM的資料~~~我不知這執行JMeter到一半消失掉是否跟JVM有關,但仍想問問各位可否給我一點知訊,謝謝!!
測試環境
OS: Windows 7
Memory: 8G
CPU: i7

1 個回答

10
fillano
iT邦超人 1 級 ‧ 2013-11-17 13:14:56
最佳解答

先改一下可以使用的記憶體看看。如果是透過jmeter.bat來執行,找一下:

<pre class="c" name="code">
set HEAP=-Xms512m -Xmx512m

把數字改大一點看看。Xms是初始的heap大小、Xmx是最大的heap大小。

看更多先前的回應...收起先前的回應...
匿名 檢舉

剛發現到我用匿名的應是不小心點到!真不好意思

我的執行緒量:500人
CPU使用率大約30%左右
Memory使用大概落在1.32GB
測試內容:很單純的網頁登入/登出

我在2.10版本底下找到了bin/jmeter.bat內,改了"set HEAP=-Xms512m -Xmx3072m"後,執行ApacheJmeter(類型:Executable Jar File),仍然壓測到一半程式會消失掉~~我操作上有誤嗎??或者是還有那裡需要注意的呢?
上網找了一些資料,有人還測到2000人程式都沒事情,是我版本有問題嗎??或者是有那些設定沒注意到?

ted99tw iT邦高手 1 級 ‧ 2013-11-18 12:16:39 檢舉

沒關係啦,那些捐錢的多是匿名的...

匿名 檢舉

補充一點,設定完後需重啟嗎??我重啟後執行上有比較順,但程式仍然自己執行到一半消失了!

匿名 檢舉

好像是我誤會了,重啟PC並未改變任何事情

匿名 檢舉

不好意思,容我更新目前的測試~~我原猜測會不會是2.10版本有問題,後來我使用2.9的版本跑450執行緒量,仍然是一樣的狀況,所以我想應該是我設定那裡沒弄好,再麻煩各位給我點意見了,謝謝!

鐵殼心 iT邦高手 1 級 ‧ 2013-11-18 15:17:56 檢舉

ted99tw提到:
沒關係啦,那些捐錢的多是匿名的...

泰大的愛慕者全都是匿名的臉紅

swift iT邦新手 2 級 ‧ 2013-11-19 11:25:23 檢舉

Log檔的例外訊息?

fillano iT邦超人 1 級 ‧ 2013-11-19 11:58:27 檢舉

最近太忙,很晚才看到...

swift說的是正解,jmeter.log也在bin目錄下。另外,你把Xms跟Xmx改成多少?

fillano iT邦超人 1 級 ‧ 2013-11-19 12:04:15 檢舉

還有,測試的時候,其實client的效能也會影響測試結果,產生壓力的機器本身的壓力也不小。建議你可以研究一下,怎麼用jmeter做分散式的測試。

fillano iT邦超人 1 級 ‧ 2013-11-19 12:09:23 檢舉

阿,剛剛漏看了你的設定,你把Xms改成跟Xmx一樣看看(都是3072)。不過也看一下jmeter.log,上面應該有記錄錯誤離開的原因。(例如:java.lang.OutOfMemoryError)

匿名 檢舉

Tese failed! java.lang.OutOfMemoryError: Java heap space
是顯示您所說的無誤我想這應該是屬於JMeter的錯誤吧??所以這代表我的記憶體雖然有修改,但可能沒有真的修改到正確的地方嗎?
其實為了驗證,我有使用jconsole去測試jvm記憶體的部份,發現到500個執行緒大概佔掉我50M左右的記憶體而已(但我是在不同台機器下測的,不過我想應該不會差很多才對),離JMeter預設的512m好像有一段距離??我不知我的測試是否正確,請各位幫我解惑一下囉
謝謝!

匿名 檢舉

補充一點,log檔的訊息要怎麼匯出?或者路徑在那兒??我是使用View log下去看的~~@@~

匿名 檢舉

請教各位Jmeter/bin底下有一個叫ApacheJMeter.jar & Jmeter.bat這兩個我使用"命令提示字元"皆可叫出JMeter,差別在於我是修改bat底下的"HEAP=-Xms3072m -Xmx3072m"

ApacheJMeter.jar & Jmeter.bat 兩者差別在那兒??

匿名 檢舉

我有將設定改成"HEAP=-Xms3072m -Xmx3072m",仍然發生如下問題~~(測試執行緒500)

fillano iT邦超人 1 級 ‧ 2013-11-20 03:17:22 檢舉

看來關鍵字其實是「GC overhead limit exceeded.」,這表示jmeter在跑的時候,用掉太多cpu resource,導致Garbage Collector搶不到資源無法有效回收記憶體。發生的原因可能要看你的腳本才知道。

簡單的解法,是關掉這個限制,透過在執行時加上-XX:-UseGCOverheadLimit這個參數就可以關掉...看了一下jmeter.bat,看起來可以把它設定在JVM_ARGS環境變數中,透過jmeter.bat執行時,會去讀這個變數。

可以直接執行*.jar檔?通常是透過java -jar xxx.jar這樣的方式來執行,可能是有設定檔案類型跟要呼叫的執行檔的關聯?不過直接執行*.jar檔,就沒辦法下參數了。jmeter.bat裡面就是設定了執行的參數,然後用 java [JVM參數] -jar xxx.jar [命令列參數] 這樣的方式來執行。命令列的參數會傳給public static void main(String[] args)處理。

fillano提到:
這表示jmeter在跑的時候,用掉太多cpu resource,導致Garbage Collector搶不到資源無法有效回收記憶體

這點我當年碰到時也是百思不得其解
什麼 Garbage Collection 是在「CPU有空時會回收記憶體」
而程式最需要記憶體時就是 CPU 最忙的時侯
然後程式還是因為記憶體不足就下來了
落寞
(今天才知道有這個參數可以關臉紅)

antijava提到:
而程式最需要記憶體時就是 CPU 最忙的時侯

這並不是必然.

匿名 檢舉

我今日做測試,JMeter我跑500執行緒的時候,幾乎花掉我快6G的記憶體…這是為何會如此??我明明只是測登入/登出而已,有何方法可以解決嗎??跑500個執行緒且只是登入登出的話,我覺得就花掉我6G實在很不正常~
有何方法可以解決呢?我覺得太花費資源了~

匿名 檢舉

看來關鍵字其實是「GC overhead limit exceeded.」,這表示jmeter在跑的時候,用掉太多cpu resource,導致Garbage Collector搶不到資源無法有效回收記憶體。發生的原因可能要看你的腳本才知道。
簡單的解法,是關掉這個限制,透過在執行時加上-XX:-UseGCOverheadLimit這個參數就可以關掉...看了一下jmeter.bat,看起來可以把它設定在JVM_ARGS環境變數中,透過jmeter.bat執行時,會去讀這個變數。

很詳細的去看,但並不是很了解意思~~~我整理了以下我的疑問,再麻煩回覆我一下了,謝謝
1、-XX:-UseGCOverheadLimit
這一段設定是要加在jmeter.bat內的那裡呢?我搜尋JVM_ARGS下去找,有找到類似的,是加在以下圖的那裡?

2、我那個錯誤的意思是指說…我的CPU太忙導致的?
3、我有設定一個"存取記錄取樣",記錄檔內也路徑,主要是存放在桌面,然後裡面也有設定一個文字檔,我希望jmeter的log都導到我所指定的路徑裡面,但疑問來了,我的log並未導入到我指定的路徑…是我那裡有弄錯了嗎?

fillano iT邦超人 1 級 ‧ 2013-11-22 03:31:22 檢舉

1 . JVM_ARGS是需要你自己去設定的環境變數,設定好了,jmeter.bat會去抓來用。在console可以用:

<pre class="c" name="code">set JVM_ARGS=-XX:-UseGCOverheadLimit

來設定。
2. 那個錯誤與其說cpu太忙,不如說gc效率不好。這個選項是設置門檻,當gc花的時間超過jvm花的時間的2%,就會跳出這個例外。這個選項在JVM中預設是開啟的。當程式快速產生大量物件,用完就丟,導致gc需要花太多時間清理物件,就會發生。
3. 存取記錄取樣的用途,恐怕跟你想像的是相反的。請你參考一下手冊:http://jmeter.apache.org/usermanual/component\_reference.html#Access\_Log\_Sampler

我的經驗是,測試中盡量不要叫jmeter將結果存入檔案,這個動作很花資源。

匿名 檢舉

謝謝!!我目前測試500人,大概花了我3g多的記憶體~但我網路上找到的怎麼會是有人測試2000個執行緒,但網友po文上寫說他硬體只裝了2g的記憶體

我只測試500個執行緒的登入/登出動作而已,就花了我如此之多的記憶體,是我的太不正常的嗎??

fillano iT邦超人 1 級 ‧ 2013-11-25 11:34:44 檢舉

總歸一句話:你的「腳本」怎麼寫的?每一個執行緒,都是依照你的腳本在執行,每個執行緒用了多少記憶體跟cpu,也都是看你的腳本。

匿名 檢舉

原來如此~~~~我了解了!!謝謝你!!!

我要發表回答

立即登入回答