先改一下可以使用的記憶體看看。如果是透過jmeter.bat來執行,找一下:
<pre class="c" name="code">
set HEAP=-Xms512m -Xmx512m
把數字改大一點看看。Xms是初始的heap大小、Xmx是最大的heap大小。
我在2.10版本底下找到了bin/jmeter.bat內,改了"set HEAP=-Xms512m -Xmx3072m"後,執行ApacheJmeter(類型:Executable Jar File),仍然壓測到一半程式會消失掉~~我操作上有誤嗎??或者是還有那裡需要注意的呢?
上網找了一些資料,有人還測到2000人程式都沒事情,是我版本有問題嗎??或者是有那些設定沒注意到?
沒關係啦,那些捐錢的多是匿名的...
補充一點,設定完後需重啟嗎??我重啟後執行上有比較順,但程式仍然自己執行到一半消失了!
好像是我誤會了,重啟PC並未改變任何事情
不好意思,容我更新目前的測試~~我原猜測會不會是2.10版本有問題,後來我使用2.9的版本跑450執行緒量,仍然是一樣的狀況,所以我想應該是我設定那裡沒弄好,再麻煩各位給我點意見了,謝謝!
ted99tw提到:
沒關係啦,那些捐錢的多是匿名的...
泰大的愛慕者全都是匿名的
Log檔的例外訊息?
最近太忙,很晚才看到...
swift說的是正解,jmeter.log也在bin目錄下。另外,你把Xms跟Xmx改成多少?
還有,測試的時候,其實client的效能也會影響測試結果,產生壓力的機器本身的壓力也不小。建議你可以研究一下,怎麼用jmeter做分散式的測試。
阿,剛剛漏看了你的設定,你把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)
看來關鍵字其實是「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並未導入到我指定的路徑…是我那裡有弄錯了嗎?
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將結果存入檔案,這個動作很花資源。