2

我们在我们的代码库中使用 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]),

在过去的几天里,我们在这方面遇到了问题。起初,我们这边的 timeout 和 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 池的讨论很少为此请求发出的将保持打开状态另外 2 秒(完成 5 秒),以便其他 http post 请求可以使用仍然打开的连接?也许我在这个理论中是错误的。

但是,如果有人能指出我使用 hackney 池的一些更好的解决方案,那就太好了。

我们使用的是 HTTPoison 0.11.1,最终使用的是 hackney 1.7.1。

4

1 回答 1

0

我遇到了以下错误:

 test login  --core test (Devato.Features.IndexPageTest)
 test/devato_web/features/index_page_test.exs:13
 ** (RuntimeError) Wallaby had an internal issue with HTTPoison:
 %HTTPoison.Error{id: nil, reason: :timeout}
 stacktrace:
   (wallaby 0.23.0) lib/wallaby/httpclient.ex:37: Wallaby.HTTPClient.make_request/5
   (wallaby 0.23.0) lib/wallaby/experimental/chrome.ex:96: Wallaby.Experimental.Chrome.start_session/1
   (wallaby 0.23.0) lib/wallaby.ex:78: Wallaby.start_session/1
   (devato 0.1.0) test/support/feature_case.ex:25: Devato.FeatureCase.__ex_unit_setup_0/1
   (devato 0.1.0) test/support/feature_case.ex:1: Devato.FeatureCase.__ex_unit__/2
   test/devato_web/features/index_page_test.exs:1: Devato.Features.IndexPageTest.__ex_unit__/2

我可以在 chrome headless 中运行测试,但我需要它才能工作,这样我才能看到它在浏览器上运行。对我有用的是配置超时

Wallaby 0.23.0添加了以下配置:

config :wallaby,
    hackney_options: [timeout: :infinity, recv_timeout: :infinity]

覆盖一个值

config :wallaby,
    hackney_options: [timeout: 5_000]
于 2021-09-28T13:17:20.147 回答