【发布时间】:2020-06-05 00:23:19
【问题描述】:
我有一个 Spring Boot 应用程序,其中声明了多个端点,如下所示:
@RestController
public class MyRestController {
@PostMapping("/someRequest")
public void doSomething(final @RequestBody MyRequest request) {
// ...
}
}
如何知道这个控制器使用的socket是否打开了TCP keepalive?
更新 1: 我使用 libdontdie 启动了应用程序,即。 e. 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 &。需要等到明天看看是否有效。
【问题讨论】:
-
如果你使用 tomcat 和默认属性运行 springboot,keep-alive 选项为 true。 docs.spring.io/spring-boot/docs/current/reference/html/…
-
对不起,长时间不活动后不工作是什么意思?只要服务器启动并运行,端点就应该随时工作。有什么问题,这与 keepalive 有什么关系?
-
@user2683814 该端点被另一个应用程序 (JIRA) 的 webhook 使用。假设我开始我的应用程序。当 JIRA 在启动后立即向我的应用程序发送请求时,它可以工作(接收并处理请求)。然后我让我的应用程序运行了好几个小时,在这期间它没有收到任何请求。然后,JIRA 向该端点发送请求。我的申请未处理此请求。只有在我重新启动我的应用程序后才会处理它。
-
仅供参考:该应用程序在 AWS (EC2) 云中的 Ubuntu 18.04 上运行。这个问题很可能是特定于操作系统的。
-
谢谢。在这一点上,我仍然认为这与 tcp keep alive 无关。当第二个请求到来时,您能否确认您的应用程序是否仍在运行?如果没有,问题可能出在您的应用程序上。您是否尝试过分析您的应用程序并查看是否满足应用程序内存要求并且没有内存泄漏?我不熟悉这方面的 aws 方面,所以它也可能有问题。如果您有 AWS 日志,您也应该检查它们。
标签: java spring-boot networking keep-alive tcp-keepalive