Spring Boot 应用程序一天后冻结

2024-01-18

我有一个 Spring Boot 应用程序在两台服务器上运行。它接受文件上传请求(约 1 KB)通过来自 1000 个物联网设备的控制器。

另外还有一个TCP监听器它还接受来自这些物联网设备的 GPS 数据作为流。

我已将一台服务器上的 Tomcat 最大线程数设置为 3000,在较大的虚拟机上设置为 5000。

一两天后,我的 Spring Boot 应用程序冻结,即它停止响应任何进一步的 API 调用。

我怀疑原因之一是物联网设备不关闭发送数据后的TCP套接字连接。

我哪里可能出错了?我没有足够的线程来处理新的传入请求?

############################

EDIT 1:

在调查线程转储并在套接字连接和关闭期间添加日志后,我发现物联网设备没有关闭连接。相反,设备每次想要发送新数据时都会创建一个新连接,而不关闭前一个连接。

在应用程序冻结之前,22500 个打开的连接被自动关闭。

我该如何处理这种行为?我应该在一定的超时后强制关闭连接吗?


您可以通过将服务隐藏在 Nginx 或 HAProxy 后面来缓解空闲连接问题,Nginx 或 HAProxy 在给定超时后默认关闭空闲连接。

另一个选项是设置server.connection-timeout在应用程序属性中(参见服务器属性 http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html),但这似乎仅适用于 HTTP。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 应用程序一天后冻结 的相关文章

随机推荐