1

JMeter 3.1에서 내 Mule 응용 프로그램 워크 플로우로 250 건의 동시 호출이 끊임없이 전송되고 결과가 좋은 결과로 시작되지만 20 밀리 초에서 6 초 이상으로 갑자기 시작되는 테스트가 실행 중입니다. .성능 테스트 결과에 영향을 미치는 Mule 테스트 스파이크

나는이 문서를 읽고 https://docs.mulesoft.com/mule-user-guide/v/3.8/tuning-performance이고 최대 활성 스레드를 기본값 16에서 300으로 변경하여 각 트랜잭션이 자체 스레드를 가지지 만 여전히 스파이크가 발생하도록 시도했습니다.

페이로드를 200 항목의 JSON 배열로 설정하는 HTTP 수신기 및 Set Payload 구성 요소가있는 테스트 플로우를 작성했으며 결과는 처음에는 좋았지 만 스파이크를 시작합니다.

내가 스파이크를 일으킬 수있는 다른 방법이 있습니까?

저는 Anypoint Studio 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> 

요약 결과 : 아래

갑자기 다시 정상으로 돌아 가기 전에 요청을 완료 할만큼 거의 3 번 촬영 ​​전에 두 자리에 일관 성 테스트 XML에 대한 결과를 요약 한 것입니다 (이에 발생 Connect 및으로 상대가 전화를 통과 할 때 경우의 수)

enter image description here

감사

+0

어떻게 당신이 내 JSONArray를 구축하는을의 이유였다 실제 생활 사례 연구 HTTP 샘플러? 테스트 계획의 트리 구조를 게시하고 JSONObject를 작성하기위한 코드가 저장되는 위치를 알려주십시오. – Selva

+0

JMeter 파일 및 결과 요약 요약, XML 테스트 흐름 및 HTTP 커넥터 구성 추가됨 – user3165854

+0

아래의 Dimitri의 답변에 동의합니다. 동일한 시스템에서 테스트를 실행하면 리소스 문제가 발생할 수 있습니다. 경과 시간 대 {연결 + 대기 시간}의 차이가 크다는 점을 고려하면 locahost에 연결하는 데 문제가 있음을 나타냅니다. – Selva

답변

1

0 메트릭에서 높은 응답 시간은 높은 연결 및 대기 시간과 관련되므로 내 네트워크 연결 문제로 인해 이러한 "스파이크"가 발생할 것으로 예상됩니다.

참고 :