0

SoapUI Pro 5.1.2を使用してcamunda BPM エンジンの REST APIで負荷テストを実行していますが、次の例外を除いて約 10 ~ 30% のエラーが発生します。

Mon Mar 30 11:53:48 PDT 2015:ERROR:java.net.SocketTimeoutException: Read timed out
   java.net.SocketTimeoutException: Read timed out
   	at java.net.SocketInputStream.socketRead0(Native Method)
   	at java.net.SocketInputStream.read(Unknown Source)
   	at java.net.SocketInputStream.read(Unknown Source)
   	at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
   	at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
   	at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
   	at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
   	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
   	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
   	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
   	at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$SoapUIHttpRequestExecutor.doReceiveResponse(HttpClientSupport.java:147)
   	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
   	at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:633)
   	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
   	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
   	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:233)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:323)
   	at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.submitRequest(HttpClientRequestTransport.java:290)
   	at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:220)
   	at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:119)
   	at com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:80)
   	at com.eviware.soapui.impl.rest.RestRequest.submit(RestRequest.java:192)
   	at com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.run(RestTestRequestStep.java:793)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:213)
   	at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:47)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:139)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:47)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:129)
   	at com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTestRunner$InternalTestCaseRunner.run(WsdlLoadTestRunner.java:490)
   	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
   	at java.util.concurrent.FutureTask.run(Unknown Source)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   	at java.lang.Thread.run(Unknown Source)

負荷テストのシナリオは次のとおりです。

  • 私のテスト ケースでは、一連の REST 呼び出しが順番に実行されています。
  • 負荷テスト属性 - スレッド: 100、スターテジー: バースト、バースト遅延: 10 秒、バースト期間: 5 秒、合計 1000 回の実行を制限します。

SoapUI の「ソケット タイムアウト」オプションを 300000、つまり 300 秒に設定しようとしましたが、これがフォーラムで見つけた唯一のオプションであることがわかりましたが、それでもこれらのエラーが発生します。また、前述したように、1000 回の実行すべてが失敗するわけではなく、この例外を除いてランダムに失敗するのはそのうちの 10 ~ 30% のみです。

合計実行数を 500 未満に制限して負荷テストが成功する場合もありますが、それでも、これらのエラーのいくつかが発生し、時折発生します。

上記のトレースから、問題はクライアント (SoupUI) 側にあることがわかりました (または、私の理解が正しくないのでしょうか?)。この問題を回避する方法を知りたいですか?

4

2 に答える 2

0

プロセスが同期の場合、プロセスを開始する REST 呼び出しは、プロセスが完了するまでブロックされます。つまり、プロセスが設定されたソケット タイムアウトよりも長くかかる場合、ソケットでそれ以上のデータが予期されないため、接続が閉じられます。解決策は、プロセスの開始イベントを非同期に設定して、REST 呼び出しがすぐに戻るようにすることです。しかし、これがあなたのベンチマークに合っているかどうかはわかりません。

于 2015-03-30T20:03:36.023 に答える
0

以前に SoapUI のグローバル設定でソケット タイムアウトを設定しましたが、SmartBear フォーラムで、テスト ケース用に別のソケット タイムアウト オプションがあることを発見しました。テストケースのタイムアウトを設定するとうまくいきました。

于 2015-03-31T16:14:00.817 に答える