Spring boot Spring引导应用程序在推送大量请求后没有响应

Spring boot Spring引导应用程序在推送大量请求后没有响应,spring-boot,java-8,redhat,Spring Boot,Java 8,Redhat,我遇到一个名为服务器a的服务器问题: 服务器A:Red Hat Enterprise Linux服务器7.2版(Maipo) 服务器B:Red Hat Enterprise Linux服务器7.7版(Maipo) jdk-8u231安装在所有服务器上 我有一个Spring Boot应用程序在两台服务器上运行。 每当我使用Jmeter向每个服务器上运行的应用程序发送100个并发请求时,在服务器B上运行的应用程序就没有问题 但在服务器A中,应用程序将不响应,这意味着进程(PID)仍在运行,但我无法访

我遇到一个名为服务器a的服务器问题: 服务器A:Red Hat Enterprise Linux服务器7.2版(Maipo) 服务器B:Red Hat Enterprise Linux服务器7.7版(Maipo)

jdk-8u231安装在所有服务器上

我有一个Spring Boot应用程序在两台服务器上运行。 每当我使用Jmeter向每个服务器上运行的应用程序发送100个并发请求时,在服务器B上运行的应用程序就没有问题

但在服务器A中,应用程序将不响应,这意味着进程(PID)仍在运行,但我无法访问执行器端点,无法访问招摇过市页面,无法发送新请求。。。日志文件从那时起没有显示任何内容

线程转储和堆转储没有显著差异

有人能告诉我如何分析那个问题吗?
我仍然不知道为什么会出现这个问题。

好吧,我只能在这里推测,但这里有一些想法可以帮助:

  • 这里有两个可能的问题来源:Java应用程序和Linux(+其网络策略、防火墙等)

  • 既然你不确定会发生什么,那就试着用“消除”的方法来工作吧

    创建将运行100个并发请求的脚本。将脚本放在服务器A(有问题的服务器)上,然后运行脚本,脚本将针对“localhost”运行(显然)。如果您看到它是有效的,那么问题根本就不在Java中。可能是一些网络策略或linux设置,谁知道呢

  • 在java应用程序的控制器中放置日志消息并检查日志。日志应该打印请求号以及其他内容,这样您就能够了解是在定义好的请求数之后卡住了,还是始终是一个不同的数字

  • 检查Spring Boot应用程序的配置。在spring boot应用程序内部运行的嵌入式web服务器(假设您没有使用反应堆栈)为服务请求而分配的线程数量可能有所不同,而这个数量也有所不同。在这种情况下,您将无法调用rest端点、执行器等

  • 如果JMX连接可用于设置,则通过JMX连接并检查Tomcat的MBean(同样,假设引擎盖下有一个Tomcat),以检查与4中几乎相同的信息

  • 您提到了线程转储。尝试进行多个线程转储,但在运行JMeter测试之前进行一次,在运行期间(当一切正常时)进行一次,在一切都卡住时进行一次

  • 在线程转储中,检查实际的堆栈跟踪,可能所有线程都无法处理数据库或其他东西,无法处理我在“4”中解释的请求

  • 检查GC日志,可能GC工作得太辛苦,以至于您无法真正与应用程序交互


  • 唯一不同的是linux版本?因为这是我公司的一台服务器,我无法确认这两台服务器是否有任何不同。谢谢您的回答。在设置JMX监视器之后,我发现有许多http nio线程仍然在运行/等待,即使我停止了发送请求。现在tomcat不能接受新的请求了。在这种情况下,它们应该被卡在某个地方,可能DB连接很慢,或者它们只是运行了一些代码。我想通过组合“6”和“7”可以获得更多信息,然后我发现有很多线程在等待log4j2。在JMX监控中,RingBuffer剩余容量为0。在这种情况下,可能发生了死锁: