我们正在尝试使用自定义编写的 Erlang 应用程序(使用 Erlang 版本 R15B)将大量文件从网络共享传输到 Openstack。
传输约 20k 个文件后,Erlang 进程开始返回 enobufs 错误,导致无法与 OpenStack 建立 HTTP 连接。此外,在同一台机器上运行的 C# 代码无法再打开套接字,导致出现此错误关于缓冲空间不足的问题。关闭所有自定义应用程序并重新启动并不能缓解这种情况。
打开的连接数永远不会超过 300 个,但包含 TIME_WAIT 时通常会进入 2k 范围。连接不会保持打开状态,但会快速打开和关闭。
我能找到的所有文章似乎都提到了“短暂的”端口限制,但似乎我们并没有达到这个限制,而且关闭 Erlang 应用程序也不会带来任何改进。
还有其他因素会占用缓冲空间而无法正确释放吗?
答案1
该应用程序的功能之一是与本地服务进行对话。这似乎触发了内核套接字泄漏在 Server 2008 中,它无法正确释放套接字。应用支持文章中提到的修补程序解决了该问题。