JMeter给出“目标服务器无法响应”错误

时间:2019-02-04 18:06:57

标签: apache jmeter

我们使用Jmeter进行性能测试。我给了200个线程(200个用户)。我们有两台服务器。就像服务器A,服务器B。我对200个用户进行了不可分割的测试,它可以正常工作。并且我们对服务器C之类的服务器进行负载平衡。因此,请求将发送到以太服务器A或服务器B。但是,如果使用服务器C配置相同的jmx脚本(200线程),则会出现以下错误(但适用于50个用户-没有错误)。

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)

1 个答案:

答案 0 :(得分:0)

如果仅在更高负载下才能重现此问题-肯定是服务器(或负载平衡器)问题,所以祝贺您找到第一个bottleneck

现在您可以调查原因并提出修复建议,下一步可能是:

  1. 检查被测应用程序/负载平衡器日志-您可以在此处找到线索
  2. 检查被测应用程序/负载均衡器/数据库/任何其他中间件配置。在大多数情况下,默认配置适合进行开发和调试,但是在运行类似于prod的负载测试之前,您需要执行一些performance tuning
  3. 在测试侧的应用程序上收集主要运行状况指标(CPU,RAM,网络,磁盘,交换使用情况等)。您的应用程序可能只是缺少硬件资源。您可以使用操作系统的内置工具或APM工具或JMeter PerfMon Plugin
  4. 在受测侧的应用程序上启用profiling tool遥测,重新运行测试。这将为您提供有关应用程序花费时间最多的地方的概述,这些地方是“最繁重的”功能或最常被调用的功能,因此您将知道该优化什么。
  5. 请确保负载均衡器(或根据其他algorithm)平均在后端服务器之间分配请求。如果是这样,可能是您只击中一台服务器-考虑将DNS Cache Manager添加到测试计划中,然后重新运行测试以查看是否有帮助。