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

我的服务器A出现问题: 服务器A:Red Hat Enterprise Linux Server 7.2版(Maipo) 服务器B:Red Hat Enterprise Linux Server 7.7(Maipo)

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

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

但是在服务器A中,应用程序将没有响应,这意味着进程(PID)仍在运行,但是我无法访问执行器端点,无法访问Swagger页面,无法发送新请求...日志文件什么都没有显示,因为那个时候。

线程转储和堆转储没有显着差异。

有人可以告诉我如何分析该问题吗? 我仍然不知道为什么会出现问题。

addsion 回答:Spring Boot应用程序在推送大量请求后没有响应

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

  1. 这里有两个可能的问题来源Java应用程序和Linux(及其网络策略,防火墙等)。

  2. 由于您不确定情况如何,请尝试通过“消除”进行工作。

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

  3. 在Java应用程序的控制器中放置一条日志消息,并检查日志。日志应该打印出请求号等内容,这样您就可以了解是在定义了明确的请求数之后还是被卡住还是始终是不同的数目。

  4. 检查Spring Boot应用程序的配置。可能是由运行在Spring Boot应用程序内部的嵌入式Web服务器分配用于服务请求的线程数量有所不同(假设您没有使用反应堆),并且此数量有所不同。在这种情况下,您将无法调用其余端点,执行器等。

  5. 如果安装程序可以使用JMX连接,请通过JMX连接并检查Tomcat的MBean(同样,假设内部有tomcat),以检查与4中几乎相同的信息。 p>

  6. 您已经提到了线程转储。尝试进行一个以上的线程转储,但在运行JMeter测试之前进行一次,在运行期间(一切仍在工作时)进行一次,在一切都停滞时进行一次。

  7. 在线程转储中检查实际的堆栈跟踪,也许所有的线程都在使用数据库之类的东西,并且不能满足我在“ 4”中所述的请求

  8. 检查GC日志,也许GC如此辛苦,以至于您无法真正与应用程序进行交互。

本文链接:https://www.f2er.com/3155151.html

大家都在问