我们在代码库中使用HTTPoison进行发布并在使用hackney池时获取请求。在这里发帖只是因为我想得到所有专家的一些意见。
我们正在使用许多相机,从每台相机,我们获取图像,然后所有这些图像,我们将它们保存到 seaweedFS服务器。
我们每秒钟会发出几千个请求。在seaweedFS方面,我们已启动服务器,超时为10秒。在我们的代码库方面,为了上传图像,我们正在使用这种hackney配置。
:hackney_pool.child_spec(:seaweedfs_upload_pool, [timeout: 5000, max_connections: 1000]),
:hackney_pool.child_spec(:seaweedfs_download_pool, [timeout: 5000, max_connections: 1000]),
过去几天,我们遇到了一个问题。起初,我们这边的超时和max_connections是10秒和5K。我们开始将这些HTTPoison错误视为
{%HTTPoison.Error{id: nil, reason: :closed}}
错误计数几乎达到12K左右,所以暂时,在Elixir Slack通道中讨论之后,我将超时和max_connections更改为上述设置。在此之后,错误从12K减少到3K,但仅持续2或3天,之后错误计数再次变为12K,依此类推。
开发SeaweedFS的人,指出我们用来发送HTTP请求的库没有关闭连接,而且在我们的seaweedFS服务器端(我们的代码库发送请求读取和写入的服务器)的结果这个命令是
root@Ubuntu-1404-trusty-64-minimal ~ # netstat | grep http | wc -l
5086
有人能建议我吗?这个错误的原因是什么?
我在Elixir Slack Channel和我所知道的hackney pool上做了一些讨论,如果我们发出一个5秒超时的发布请求,并且HTTP请求在2或3秒内成功返回,那么为此请求建立的连接将保持打开其他2秒(完成5秒),这样,其他http post请求可以使用仍然打开的连接吗?也许这个理论我错了。
但如果有人能指出一些更好的黑客池解决方案,那就太好了。
我们正在使用最终使用hackney 1.7.1的HTTPoison 0.11.1。