当前位置: 首页 > 知识库问答 >
问题:

如何解决获取org.apache.http.NoHttpResponseException:在线程启动后10秒内,仅使用50个线程无法响应?

李宁
2023-03-14

当运行带有4个API调用作为线程组的一部分的Jeter脚本时,我收到了这个错误。我已经开始看到这个错误,通常是在触发10到15个请求并且执行不到20秒的脚本时。这是随机出现的,有时5%的调用失败,有时高达75%到80%。也将Timeout值设置为100000 ms。

org.apache.http.NoHttpResponseException: 10.157.254.115:80 failed to respond
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
    at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
    at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:939)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:650)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:66)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1301)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1290)
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268)
    at java.lang.Thread.run(Unknown Source)

共有1个答案

林弘壮
2023-03-14

在JMeter端你没有什么可以“解决”的。

根据NoHttpResponseException JavaDoc:

表示目标服务器无法使用有效的HTTP响应进行响应。

因此,您需要在服务器端“解决”这个问题,原因可能是:

    < li >服务器配置不正确关于工作线程的最大数量,请查阅您的应用程序服务器文档,可能您还需要启动一个额外的实例并在前端设置负载平衡器。 < li >资源不足,请确保应用服务器在CPU、RAM、网络插座等方面有足够的运行空间。如果您没有监控工具链,您可以使用JMeter PerfMon插件来实现这一点 < li >这也可能是由死锁等底层数据库问题引起的,因此请检查您的数据库慢速查询日志中是否有任何可疑条目 < li >最后但并非最不重要的一点是,这可能是代码中的一个错误,在启用探查器工具遥测的情况下重新运行您的测试,看看到底是什么导致了缓慢的响应或错误
 类似资料:
  • 我写了一个程序的小例子,它应该在按下后开始运行多批次并行线程。这个过程只能启动一次,在一批线程完成后,它应该检查是否是退出的时候了。 所以例如,它可以像这样: -批处理1(10个线程)正在运行,在它<代码>stop_button被按下。完成批次1后,程序应该停止而不运行批次2并返回初始状态(再次具有启动此过程的选项)。 但是,在这个过程中,GUI似乎根本无法注册单击或任何东西。它只是看起来冻结了。

  • 问题内容: 我有一个固定的线程池,我可以将任务提交给该线程池(限制为 5个 线程)。如何找出这 5个 线程中的哪一个执行我的任务(例如“第3 个 线程中的第3 个 线程正在执行此任务”)? 问题答案: 使用:

  • 我有4条线。每个人每x秒打印给定的字母x次。任务是一次启动3个线程,在至少一个前一个线程完成时启动第四个线程。我不知道如何通知最后一个线程在适当的时间运行。

  • 问题内容: 我有一个运行以下配置的网站: Django + mod-wsgi + Apache 在一个用户的请求中,我向另一个服务发送另一个HTTP请求,并通过python的httplib库解决了这个问题。 但是有时此服务不会得到太长的答案,并且httplib的超时不起作用。因此,我创建了线程,在该线程中,我向服务发送请求,并在20秒(20秒-是请求超时)后加入。它是这样工作的: 像这样的东西 并

  • 本文向大家介绍在C#中如何从线程中获取线程ID,包括了在C#中如何从线程中获取线程ID的使用技巧和注意事项,需要的朋友参考一下 线程被定义为程序的执行路径。每个线程定义唯一的控制流。如果您的应用程序涉及复杂且耗时的操作,那么设置不同的执行路径或线程(每个线程执行一个特定的工作)通常会很有帮助。 线程是轻量级进程。使用线程的一个常见示例是现代操作系统对并发编程的实现。使用线程可以节省CPU周期,并提

  • 我的博客在Ghost上运行,并在赫洛库托管。它工作了几个星期,但现在,没有进行任何更改,它就崩溃了。错误: 但是我的配置文件与往常一样: 甚至尝试重新启动dyno并部署了我的博客的新版本,但没有成功。仍然是相同的错误。 有什么建议吗?