我们在golang上运行了一个API,这会有很高的流量,突然我们今天有以下错误
http:接受错误:接受tcp [::]:8443:accept4:太多打开 文件;重试1s
我之前检查过的几件事是,最大fd大小,每个过程的大小为16k,但由于某种原因,它达到了最大值而没有提供大量细节。
是否有任何gotool或提示可以检查我如何找到可能导致此问题的什么?
我不确定是否存在GO工具来帮助解决此类问题。代码中可能有一些连接泄漏。
消耗http.Response
的有效载荷后,可能会发生的常见泄漏是忘记致电resp.Body.Close()
。
闲置连接可能是另一个可能的原因。根据HTTP软件包文档:
默认情况下,将未来重复使用的传输库连接。访问许多主机时,这可能会留下许多开放连接。可以使用Transport的Clossidleconnections方法和MaxidleConnsperhost和DisableSeepalives领域来管理此行为。
如果是这样,您可以尝试在Transport
句柄上明确调用CloseIdleConnections
,或者减少MaxIdleConnsPerHost
值。