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度量标准,高响应时间与高连接和延迟相关,所以我的期望是由于网络问题,您得到了这些“尖峰”。

参考文献: