java - 如何找出特定端点是否在 Spring Boot 中启用了 keepalive?
问题描述
我有一个 Spring Boot 应用程序,其中声明了几个端点,如下所示:
@RestController
public class MyRestController {
@PostMapping("/someRequest")
public void doSomething(final @RequestBody MyRequest request) {
// ...
}
}
如何确定该控制器使用的套接字是否打开了TCP keepalive ?
更新 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 &
. 需要等到明天看看它是否有效。
解决方案
很有可能发生以下情况之一。这可能与keepalive无关。
原因
- 由于 CPU 空闲,您的 AWS 资源正面临冷启动或进入休眠状态。这可能是由于 AWS
- 您的
/someRequest
端点依赖于一些下游资源,例如数据库、另一个 RESTful 服务,或者可能与 I/O 处于空闲状态有关。 - 如果它正在连接到数据库,请确保您启用了重新连接。这可能取决于您如何设置连接。请参阅Spring 正在失去与数据库的连接,并且无法恢复或重新连接以了解如何根据您的情况进行操作。
建议解决
- 在 AWS 控制台上检查实例的运行状况,看看它是否已达到 IDLE。尝试让节点空闲。
- 使用 Spring Boot Actuator 可以测试下游依赖项的健康状况,并在进行任何 API 调用之前确保您的健康状况良好。见,https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html
- 我不想推荐这个,但是你上面的所有选项都干了,然后创建一个虚拟端点,比如
/info
or/health
并定期轮询它。这不是一个很好的解决方案,但希望在大多数情况下都能工作。
推荐阅读
- python - Python 时区到区域转换器
- .net - 使用 dotnet swagger 命令为 azure 函数生成 swagger 文件
- django - django 使用不同的外键更新多个实例
- r - 将闪亮的应用程序发布到 shinyapps.io 时与 check_container_alive 相关的错误
- javascript - 如何通过cmd直接调用函数通过Node js获取和更新记录到数据库
- javascript - 如何通过 Aws Cloudwatch + Elastic Beanstalk 显示 console.log
- docker - 在 amazon corretto docker 镜像中启用 SELinux
- react-native - 如何设置像渐变一样的背景颜色?
- azure - 仅用于 Azure DevOps 的服务主体是否需要付费?
- command-line - 从远程 Linux PC 将文件下载到 Windows PC,其中文件的路径包含空格