基于 Netty 的 impl 上的 JMeter 测试每第二个请求都会产生错误
JMeter test on Netty-based impl produces error for every second request
我已经实现了基于 netty.io 项目提供的 HTTP server example 的 HTTP 服务。
当我从命令行 (wget) 或浏览器对服务 URL 执行 GET 请求时,我收到了预期的结果。
当我使用 ApacheBench ab -n 100000 -c 8 http://localhost:9000/path/to/service
执行负载测试时,没有遇到任何错误(无论是在服务端还是在 ab 端)并且看到请求处理持续时间的公平数字。
之后,我在 JMeter 中设置了一个测试计划,该计划有一个线程组,其中有 1 个线程和 2 个循环计数。我插入了一个 HTTP 请求采样器,我只是在其中添加了服务器名称 localhost
、端口编号 9000
和路径 /path/to/service
。然后我还添加了一个 View Results Tree
和一个 Summary Report
监听器。
最后,我执行了测试计划,收到了一个有效的响应和一个错误,显示如下内容:
Thread Name: Thread Group 1-1
Sample Start: 2015-06-04 09:23:12 CEST
Load time: 0
Connect Time: 0
Latency: 0
Size in bytes: 2068
Headers size in bytes: 0
Body size in bytes: 2068
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: org.apache.http.NoHttpResponseException
Response message: Non HTTP response message: The target server failed to respond
Response headers:
HTTPSampleResult fields:
ContentType:
DataEncoding: null
在响应数据选项卡中发现的关联异常显示以下内容
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.receiveResponseHeader(MeasuringConnectionManager.java:201)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:517)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:331)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
at java.lang.Thread.run(Thread.java:745)
因为我已经有一个类似的服务 运行 接收和处理没有错误的网络跟踪数据,这可能是我的测试计划或 JMeter 中的问题 .. 但我不确定 :-(
有没有人经历过类似的行为?提前致谢;-)
问题可能与 Keep-Alive 管理有关。
阅读那些:
所以您的解决方案是其中之一:
如果您确定这是一个保持活动状态的问题:
尝试每晚构建 jmeter http://jmeter.apache.org/nightly.html:
Download the _bin and _lib files
Unpack the archives into the same directory structure
The other archives are not needed to run JMeter.
并调整httpclient4.idletimeout
的值
解决方法是根据 :
增加重试或添加连接失效检查
我已经实现了基于 netty.io 项目提供的 HTTP server example 的 HTTP 服务。
当我从命令行 (wget) 或浏览器对服务 URL 执行 GET 请求时,我收到了预期的结果。
当我使用 ApacheBench ab -n 100000 -c 8 http://localhost:9000/path/to/service
执行负载测试时,没有遇到任何错误(无论是在服务端还是在 ab 端)并且看到请求处理持续时间的公平数字。
之后,我在 JMeter 中设置了一个测试计划,该计划有一个线程组,其中有 1 个线程和 2 个循环计数。我插入了一个 HTTP 请求采样器,我只是在其中添加了服务器名称 localhost
、端口编号 9000
和路径 /path/to/service
。然后我还添加了一个 View Results Tree
和一个 Summary Report
监听器。
最后,我执行了测试计划,收到了一个有效的响应和一个错误,显示如下内容:
Thread Name: Thread Group 1-1
Sample Start: 2015-06-04 09:23:12 CEST
Load time: 0
Connect Time: 0
Latency: 0
Size in bytes: 2068
Headers size in bytes: 0
Body size in bytes: 2068
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: org.apache.http.NoHttpResponseException
Response message: Non HTTP response message: The target server failed to respond
Response headers:
HTTPSampleResult fields:
ContentType:
DataEncoding: null
在响应数据选项卡中发现的关联异常显示以下内容
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.receiveResponseHeader(MeasuringConnectionManager.java:201)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:517)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:331)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
at java.lang.Thread.run(Thread.java:745)
因为我已经有一个类似的服务 运行 接收和处理没有错误的网络跟踪数据,这可能是我的测试计划或 JMeter 中的问题 .. 但我不确定 :-(
有没有人经历过类似的行为?提前致谢;-)
问题可能与 Keep-Alive 管理有关。
阅读那些:
所以您的解决方案是其中之一:
如果您确定这是一个保持活动状态的问题:
尝试每晚构建 jmeter http://jmeter.apache.org/nightly.html:
Download the _bin and _lib files Unpack the archives into the same directory structure The other archives are not needed to run JMeter.
并调整httpclient4.idletimeout
的值
解决方法是根据 :
增加重试或添加连接失效检查