Spring boot:有时没有从基于 Rest Api 的服务中得到任何响应

Posted

技术标签:

【中文标题】Spring boot:有时没有从基于 Rest Api 的服务中得到任何响应【英文标题】:Spring boot : Sometimes not getting any Reponse from Rest Api based service 【发布时间】:2021-12-21 02:55:40 【问题描述】:

我有一些基于 API 的 jar 服务部署在 Linux CentOS 服务器中。一切正常,但有时我观察到我没有从服务中获得 API 响应。这是一种罕见的情况,经过长时间的运行,它会导致问题。我已经检查了一些博客和帖子,但没有得到预期的解决方案。

我尝试了几种方法:

来自前端应用程序 来自邮递员 使用卷曲 尝试使用 telnet - 已连接且端口也已打开 检查的 jar 是否正在运行 - 它正在定义的端口中运行。 网络连接 - 也可以。 创建了一些示例端点而不使用 DB 调用来检查问题。 在代码中添加一些日志以突出显示进出时间。 从同一台机器以及不同的机器进行一些静态 API 调用。

但还是同样的问题。任何端点都没有响应。

我检查了日志文件,一切正常,文件中没有新的日志追加。

但是当我重新启动 jar(杀死端口并再次运行)时,它会正常运行。

我不确定是什么原因造成的。有人面临同样的问题吗? 可以冻结响应的可能原因是什么? 非常感谢需要帮助来解决问题或任何指导。

【问题讨论】:

单个请求是否是一次性的?还是它不再响应任何请求? 不是一次,而是多次。但有时在任何请求中 这看起来像是 JVM 以某种方式卡住了,例如它可能需要更多的内存,但因为它无法释放足够的内存,垃圾收集器可能会在没有成功的情况下在类固醇上运行,并且您最终可能会遇到 OOM 错误。这只是一个猜测,很难远程诊断,尤其是在没有更多信息的情况下。您应该做的是寻找以下模式:哪些端点受到影响?在这开始之前会发生什么?可能有什么东西每次都重复出现吗?您是否能够获取线程或堆转储,如果可以,他们会告诉您什么? 您可以将您的项目上传到 GitHub 并在此处发表评论中的链接 @Thomas,感谢您的建议。我已经检查了几次,这是一种罕见的情况。当问题发生时,任何端点都没有响应。当它发生之前,什么都没有发生。我检查并在附加的日志中没有错误或警告。日志中的一切正常,只有新日志没有附加,因为服务没有响应或处理任何请求。即使是为了检查,我也单独运行了 jar 并且没有发生传入请求,只允许邮递员手动请求。但几天后,我观察到邮递员的请求也没有响应 【参考方案1】:

我认为它发生在请求数量很大或您的系统挂起时 防止这种情况发生的方法是为请求设置timeOut,如果在一定时间后没有响应,则会发送消息 并且可能在消息数量很大时发生,因此最好使用 io.github.resilience4j.ratelimiter 来处理它。 祝你好运

【讨论】:

感谢您的建议。这是一种罕见的情况。出于检查目的,我已经单独运行了 jar,并且不允许传入请求,只允许邮递员手动请求。一开始它工作得很好。但几天后,我再次提出请求,但没有响应。 您是否尝试在指定时间内重复请求并检查它,也许您应该为您的 API 编写健康检查 Spring Actuator 已经实现了同样的问题。

以上是关于Spring boot:有时没有从基于 Rest Api 的服务中得到任何响应的主要内容,如果未能解决你的问题,请参考以下文章

基于两个数据库的 Spring Boot Batch-REST-api 的 Docker 问题

Spring Boot REST API - 请求超时?

Spring Boot JWT - 如何实现刷新令牌和注销 REST-API

使用 CAS 保护 Spring Boot Rest 服务

处理从自定义转换器抛出的Spring Boot REST中的异常

Spring boot - 没有嵌入式 tomcat 的 Rest Call 客户端