gpt4 book ai didi

java - 与 Jetty 的 TIME_WAIT 连接过多

转载 作者:可可西里 更新时间:2023-11-01 16:38:05 26 4
gpt4 key购买 nike

我在 10 台不同的服务器上运行一个 API,它们都在防火墙后面。我正在使用 jetty 8 来处理所有的 http 请求。此 API 的用例是短期连接。

几个月前,我开始随机出现太多打开的文件描述符错误。这些错误使服务器完全没有响应,我需要重新启动 jetty 服务器才能解决这个问题。今天,这取决于我获得的流量,每天发生 0-10 次。

经过一些调查,我注意到我正在耗尽可用连接数,因为所有连接都停留在 TIME_WAIT 状态,所以我无法创建新连接。

ss -s

TCP: 13392 (estab 1549, closed 11439, orphaned 9, synrecv 0, timewait *11438*/0), ports 932

在此示例中,处于 TIME_WAIT 状态的连接数非常低,但最多可达 50k。

我一直在尝试几个内核调整,我还尝试将 SO_LINGER 定时器设置为 1 秒以用于 jetty 套接字。所有这些更改都有助于降低频率,但我仍然经常遇到错误。

另外值得一提的是,我在每台服务器上每秒接收大约 3k 个请求,而且 CPU 使用率非常低。今天扩展我的流量的瓶颈是这个连接问题。

有人知道我可以做些什么来正确处理吗?

最佳答案

'太多打开的文件描述符'可能是由于您的应用程序中的资源泄漏引起的。

TIME_WAIT 状态是由于是先发送关闭的一端,而不是先接收关闭的一端造成的。您可能需要重新考虑您的应用程序协议(protocol),以便首先关闭的是客户端。这并不难安排。例如,如果您使用客户端连接池,它会免费掉线。

这两个条件没有关系。 TIME_WAIT 状态只能发生在套接字已经关闭的端口上。它不会导致“太多打开的文件描述符”问题。

关于java - 与 Jetty 的 TIME_WAIT 连接过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com