1

我正在運行測試,其中250個併發呼叫被不斷地從JMeter的3.1發送到我的騾子應用程序的工作流程和結果都開始了良好的效果,但突然開始飆升,從20毫秒到6秒以上。測試峯值結果

我已閱讀此文檔:https://docs.mulesoft.com/mule-user-guide/v/3.8/tuning-performance並嘗試將Max Active Threads從默認的16位更改爲300,因此每個事務都將擁有自己的線程,但仍會出現尖峯。

我已經創建了具有HTTP監聽器,並且將有效負載的200個項目和一個JSON陣列的集有效載荷分量的測試流程再次結果是良好的開始,但然後啓動尖峯。

還有什麼我可以看看,可能會導致尖峯?

我使用Anypoint工作室6.1和Mule 3.8.1和使用Apache JMeter的3.1測試。

HTTP監聽器:

enter image description here

測試XML流量:

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" 
    xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/mongo http://www.mulesoft.org/schema/mule/mongo/current/mule-mongo.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd"> 
    <flow name="testFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/perf-test" allowedMethods="GET" doc:name="HTTP"/> 
     <set-payload value="[{ 
    &quot;id&quot;: &quot;0001&quot;, 
    &quot;type&quot;: &quot;donut&quot;, 
    &quot;name&quot;: &quot;Cake&quot;, 
    &quot;ppu&quot;: 0.55, 
    &quot;batters&quot;: { 
     &quot;batter&quot;: [{ 
      &quot;id&quot;: &quot;1001&quot;, 
      &quot;type&quot;: &quot;Regular&quot; 
     }, { 
     &quot;id&quot;: &quot;5004&quot;, 
     &quot;type&quot;: &quot;Maple&quot; 
    } ...repeated for 10,000 lines 
    ] 
}]" encoding="UTF-8" mimeType="application/json" doc:name="Set Payload"/> 
    </flow> 
</mule> 

JMeter的測試計劃:

<?xml version="1.0" encoding="UTF-8"?> 
<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033"> 
    <hashTree> 
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> 
     <stringProp name="TestPlan.comments"></stringProp> 
     <boolProp name="TestPlan.functional_mode">false</boolProp> 
     <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> 
     <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> 
     <collectionProp name="Arguments.arguments"/> 
     </elementProp> 
     <stringProp name="TestPlan.user_define_classpath"></stringProp> 
    </TestPlan> 
    <hashTree> 
     <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Test" enabled="true"> 
     <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> 
     <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> 
      <boolProp name="LoopController.continue_forever">false</boolProp> 
      <intProp name="LoopController.loops">-1</intProp> 
     </elementProp> 
     <stringProp name="ThreadGroup.num_threads">250</stringProp> 
     <stringProp name="ThreadGroup.ramp_time">10</stringProp> 
     <longProp name="ThreadGroup.start_time">1486993535000</longProp> 
     <longProp name="ThreadGroup.end_time">1486993535000</longProp> 
     <boolProp name="ThreadGroup.scheduler">false</boolProp> 
     <stringProp name="ThreadGroup.duration">60</stringProp> 
     <stringProp name="ThreadGroup.delay"></stringProp> 
     </ThreadGroup> 
     <hashTree> 
     <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true"> 
      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> 
      <collectionProp name="Arguments.arguments"/> 
      </elementProp> 
      <stringProp name="HTTPSampler.domain">localhost</stringProp> 
      <stringProp name="HTTPSampler.port">8091</stringProp> 
      <stringProp name="HTTPSampler.connect_timeout"></stringProp> 
      <stringProp name="HTTPSampler.response_timeout"></stringProp> 
      <stringProp name="HTTPSampler.protocol">http</stringProp> 
      <stringProp name="HTTPSampler.contentEncoding"></stringProp> 
      <stringProp name="HTTPSampler.path"></stringProp> 
      <stringProp name="HTTPSampler.concurrentPool">4</stringProp> 
     </ConfigTestElement> 
     <hashTree/> 
     <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Test1" enabled="true"> 
      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> 
      <collectionProp name="Arguments.arguments"/> 
      </elementProp> 
      <stringProp name="HTTPSampler.domain"></stringProp> 
      <stringProp name="HTTPSampler.port"></stringProp> 
      <stringProp name="HTTPSampler.connect_timeout"></stringProp> 
      <stringProp name="HTTPSampler.response_timeout"></stringProp> 
      <stringProp name="HTTPSampler.protocol"></stringProp> 
      <stringProp name="HTTPSampler.contentEncoding"></stringProp> 
      <stringProp name="HTTPSampler.path">/v1/perf-test</stringProp> 
      <stringProp name="HTTPSampler.method">GET</stringProp> 
      <boolProp name="HTTPSampler.follow_redirects">false</boolProp> 
      <boolProp name="HTTPSampler.auto_redirects">true</boolProp> 
      <boolProp name="HTTPSampler.use_keepalive">true</boolProp> 
      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> 
      <boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp> 
      <boolProp name="HTTPSampler.monitor">false</boolProp> 
      <stringProp name="HTTPSampler.embedded_url_re"></stringProp> 
     </HTTPSamplerProxy> 
     <hashTree> 
      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> 
      <collectionProp name="Asserion.test_strings"> 
       <stringProp name="-456173320">Test</stringProp> 
      </collectionProp> 
      <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> 
      <boolProp name="Assertion.assume_success">false</boolProp> 
      <intProp name="Assertion.test_type">2</intProp> 
      </ResponseAssertion> 
      <hashTree/> 
     </hashTree> 
     <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> 
      <boolProp name="ResultCollector.error_logging">false</boolProp> 
      <objProp> 
      <name>saveConfig</name> 
      <value class="SampleSaveConfiguration"> 
       <time>true</time> 
       <latency>true</latency> 
       <timestamp>true</timestamp> 
       <success>true</success> 
       <label>true</label> 
       <code>true</code> 
       <message>true</message> 
       <threadName>true</threadName> 
       <dataType>true</dataType> 
       <encoding>false</encoding> 
       <assertions>true</assertions> 
       <subresults>true</subresults> 
       <responseData>false</responseData> 
       <samplerData>false</samplerData> 
       <xml>false</xml> 
       <fieldNames>true</fieldNames> 
       <responseHeaders>false</responseHeaders> 
       <requestHeaders>false</requestHeaders> 
       <responseDataOnError>false</responseDataOnError> 
       <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> 
       <assertionsResultsToSave>0</assertionsResultsToSave> 
       <bytes>true</bytes> 
       <url>true</url> 
       <threadCounts>true</threadCounts> 
       <sampleCount>true</sampleCount> 
       <idleTime>true</idleTime> 
       <connectTime>true</connectTime> 
      </value> 
      </objProp> 
      <stringProp name="filename">tmp/Results/summary.csv</stringProp> 
      <boolProp name="useGroupName">true</boolProp> 
     </ResultCollector> 
     <hashTree/> 
     <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true"> 
      <boolProp name="ResultCollector.error_logging">false</boolProp> 
      <objProp> 
      <name>saveConfig</name> 
      <value class="SampleSaveConfiguration"> 
       <time>true</time> 
       <latency>true</latency> 
       <timestamp>true</timestamp> 
       <success>true</success> 
       <label>true</label> 
       <code>true</code> 
       <message>true</message> 
       <threadName>true</threadName> 
       <dataType>true</dataType> 
       <encoding>false</encoding> 
       <assertions>true</assertions> 
       <subresults>true</subresults> 
       <responseData>false</responseData> 
       <samplerData>false</samplerData> 
       <xml>false</xml> 
       <fieldNames>true</fieldNames> 
       <responseHeaders>false</responseHeaders> 
       <requestHeaders>false</requestHeaders> 
       <responseDataOnError>false</responseDataOnError> 
       <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> 
       <assertionsResultsToSave>0</assertionsResultsToSave> 
       <bytes>true</bytes> 
       <url>true</url> 
       <threadCounts>true</threadCounts> 
       <sampleCount>true</sampleCount> 
       <idleTime>true</idleTime> 
       <connectTime>true</connectTime> 
      </value> 
      </objProp> 
      <stringProp name="filename">tmp/AggregateReport.csv</stringProp> 
      <boolProp name="useGroupName">true</boolProp> 
     </ResultCollector> 
     <hashTree/> 
     <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> 
      <stringProp name="ConstantTimer.delay">1000</stringProp> 
     </ConstantTimer> 
     <hashTree/> 
     <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> 
      <boolProp name="ResultCollector.error_logging">false</boolProp> 
      <objProp> 
      <name>saveConfig</name> 
      <value class="SampleSaveConfiguration"> 
       <time>true</time> 
       <latency>true</latency> 
       <timestamp>true</timestamp> 
       <success>true</success> 
       <label>true</label> 
       <code>true</code> 
       <message>true</message> 
       <threadName>true</threadName> 
       <dataType>true</dataType> 
       <encoding>false</encoding> 
       <assertions>true</assertions> 
       <subresults>true</subresults> 
       <responseData>false</responseData> 
       <samplerData>false</samplerData> 
       <xml>false</xml> 
       <fieldNames>false</fieldNames> 
       <responseHeaders>false</responseHeaders> 
       <requestHeaders>false</requestHeaders> 
       <responseDataOnError>false</responseDataOnError> 
       <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> 
       <assertionsResultsToSave>0</assertionsResultsToSave> 
       <bytes>true</bytes> 
       <threadCounts>true</threadCounts> 
      </value> 
      </objProp> 
      <stringProp name="filename"></stringProp> 
     </ResultCollector> 
     <hashTree/> 
     </hashTree> 
    </hashTree> 
    </hashTree> 
</jmeterTestPlan> 

摘要結果:

下面是結果測試XML的總結它是始終在兩位數前突然採取了幾乎3倍的時間纔再次回到正常完成請求(這發生在在多個場合,因爲它經過的調用)

enter image description here

感謝

+0

你是如何內構建JSONArray的原因HTTP採樣器?請你可以發佈你的測試計劃的樹結構,並且你的代碼是用來存儲JSONObject的嗎? – Selva

+0

增加JMeter的文件,並剪斷結果彙總,XML測試流程和HTTP連接器配置 – user3165854

+0

我同意以下迪米特里的答案。由於您在同一臺計算機上運行測試,因此可能會遇到資源問題。鑑於已用時間與{連接+延遲}之間的巨大差異,這表明您在連接到locahost時遇到了問題。 – Selva

回答

1

展望ConnectLatency度量標準,高響應時間與高連接和延遲相關,所以我的期望是由於網絡問題,您得到了這些「尖峯」。

參考文獻: