簡體   English   中英

Jmeter瓶頸

[英]Jmeter bottleneck

我們有一個正在使用Jmeter測試的系統。 我們在Jmeter加速測試中遇到以下瓶頸:

症狀:

  • 我們每秒最多可達到15個請求(rps)。
  • 此限制是針對每個Java VM,而不是針對每台計算機。
  • CPU不受限制,只能達到大約。 30%。 該測試與請求一起進行了大量的預處理和后處理,因此這可能是一個問題,但不是。
  • 內存(具有3.5 GiB的計算機)大約為。 70%-80%。 這足以使rps更高,因此這不是限制。
  • 已經根據建議設置了內存(JVM),並且對其進行了各種改動以進行實驗,但沒有任何改進。
  • 我還檢查了TCP連接,從“使用keep-alive”更改為“不使用keep-alive”並沒有任何改善(這是不希望的)。
  • 所有(!)斷言都被關閉。
  • 記錄:僅記錄響應時間,響應時間百分位數,吞吐量和請求率,以及jmeter的標准表輸出。
  • 所有日志文件都保存到本地硬盤。

通過具有以下JVM設置的jmeter.bat腳本啟動Jmeter:

set HEAP=-Xms768m -Xmx768m -Xss128k
set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2
set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
set PERM=-XX:PermSize=256m -XX:MaxPermSize=256m
set DUMP=-XX:+HeapDumpOnOutOfMemoryError
set DDRAW=
set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %RMIGC% %PERM% %DDRAW% %JM_START% %JM_LAUNCH% %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%

jmeter.properties具有以下內容:

language=en
cookies=cookies
xml.parser=org.apache.xerces.parsers.SAXParser
jmeter.laf.mac=System
jmeter.loggerpanel.maxlength=5000
not_in_menu=HTML Parameter Mask,HTTP User Parameter Modifier
remote_hosts=127.0.0.1
log_level.jmeter=ERROR
log_level.jmeter.junit=ERROR
log_level.jorphan=WARN
log_file='c:\\temp\\jmeter_'yyyyMMdd'.log'
jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss
jmeter.save.saveservice.base_prefix=~/
sampleresult.timestamp.start=true
upgrade_properties=/bin/upgrade.properties
HTTPResponse.parsers=htmlParser wmlParser
htmlParser.types=text/html application/xhtml+xml application/xml text/xml
wmlParser.className=org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
wmlParser.types=text/vnd.wap.wml
summariser.interval=180
summariser.log=true
summariser.out=true
beanshell.server.file=../extras/startup.bsh
time.YMDHMS=yyyyMMdd_HHmmss
onload.expandtree=true
view.results.tree.max_size=0
classfinder.functions.contain=.functions.
classfinder.functions.notContain=.gui.
user.properties=user.properties
system.properties=system.properties   

jmx ,指定了以下設置:

<stringProp name="ThreadGroup.num_threads">300</stringProp>
<stringProp name="ThreadGroup.ramp_time">0</stringProp>
<stringProp name="ThreadGroup.ramp_time">0</stringProp>
<longProp name="ThreadGroup.start_time">1404986400000</longProp>
<longProp name="ThreadGroup.end_time">1404990000000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration">3600</stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<boolProp name="ThreadGroup.delayedStart">true</boolProp>

問題 :瓶頸在哪里,我們如何擺脫瓶頸?

我只想提出幾點建議,

  1. 實施Blazemerter JMeter技巧 (由Dmitri提供的相同鏈接)指定的所有JMeter最佳實踐。這將確保腳本得到優化。
  2. 您的計算機具有3.5 GB或ram的內存,但是顯示了JMeter設置,您僅提供了768mb的JVM最大內存。 您是否正在同一台計算機上啟動多個JMeter實例? 我認為JMeter的單個實例的最大堆大小為2gb(或出於mmgt的目的而創建2個實例)應該能夠產生300個用戶負載。
  3. 盡管測試運行1個小時,但我看到測試的加速時間為0。 對於300位用戶而言,所有用戶都將在0秒內進入在線狀態,這將在開始時使系統過載。 真的需要嗎? 可能您應該增加10-15分鍾的時間並運行測試,這將有助於提高Jmeter實例的性能。
  4. 確定負載測試計划(或SLA)中是否要生成多少tps或req / sec,然后可能使用吞吐量控制器來控制所需的吞吐量。
  5. 使用以下命令開始監視JMeter實例:

    JVisualVM:UI工具,免費軟件,詳細信息,易於使用
    JMap:UI和命令行,出色的細節,易於使用
    Jstat:命令行,系統開銷非常低,詳細信息

    並監視負載下的應用系統,以進行更好的分析。 這也將幫助您找到應用程序方面的瓶頸(如果有)。

通常,普通的用戶計算機還將具有8gb ram,雙/四核cpus,因此可以從一台計算機上產生500-1000個用戶負載。 如果完全需要,請進行分布式JMeter測試。

考慮以下清單:

  1. 必須使用非GUI模式
  2. 需要禁用所有監聽器
  3. 如果您使用任何Beanshell測試元素-安裝groovy腳本引擎並切換到JSR223 Sampler和groovy語言
  4. 有關建議的JVM和GC調整,請參見JMeter性能和調整技巧指南。

如果上述所有方法均無濟於事-考慮進行遠程(分布式)測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM