如何查明特定端点是否在Spring Boot中启用了保活



我有一个Spring Boot应用程序,它有几个端点声明如下:

@RestController
public class MyRestController {
@PostMapping("/someRequest")
public void doSomething(final @RequestBody MyRequest request) {
// ...
}
}

如何查找此控制器使用的套接字是否已打开TCP保活?

更新1:我用libdontdie启动了应用程序,即sudo DD_DEBUG=1 DD_TCP_KEEPALIVE_TIME=4 DD_TCP_KEEPALIVE_INTVL=5 DD_TCP_KEEPALIVE_PROBES=6 LD_PRELOAD=/usr/lib/libdontdie.so java -jar myapp.jar --spring.config.location=myapp-config.yaml &。需要等到明天再看它是否有效。

很有可能发生以下情况之一。这可能与保活无关。

原因

  1. 由于CPU空闲,您的AWS资源正面临冷启动或进入休眠状态。这可能是由于AWS
  2. 您的/someRequest端点依赖于一些下游资源,如数据库、另一个restful服务,或者可能与I/O处于空闲状态有关
  3. 如果它正在连接到数据库,请确保已启用重新连接。这可能取决于您如何设置连接。请参阅Spring正在失去与DB的连接,并且没有恢复或重新连接,以了解如何针对您的情况进行恢复或连接

建议解决

  1. 在AWS控制台上检查实例的运行状况,看看它是否达到IDLE。尝试将节点设置为IDLE
  2. 在进行任何API调用之前,使用Spring Boot Actuator可以测试下游依赖项的健康状况,并确保您的健康状况良好。看见https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html
  3. 我不想推荐这样做,但上面所有的选项都是干的,然后创建一个像/info/health这样的伪端点,并定期轮询它。这不是一个很好的解决方案,但预计在大多数情况下都能奏效

轮询就是解决方案。在特定的时间间隔后继续轮询它。

相关内容

  • 没有找到相关文章

最新更新