0

我正在尝试使用 gen_server 从 erlang 的 redis 中插入 10000 条记录。但是,我得到以下异常

exception exit: {connection_error,{connection_error,eaddrnotavail}}

笔记:-

  • redis 服务器上的端口范围就足够了
  • Redis 配置为一次接受 10000 个连接
  • 我还尝试使用 timer:sleep 来排除连接已满的可能性。
  • 我正在启动连接、触发查询并立即关闭连接
  • 从 gen_server 到 redis 的调用是同步的
  • 我正在使用 eredis 作为库
  • 我在 redis 中插入大约 200 到 500 次时收到此错误
4

2 回答 2

2

得到它的工作:) 发布答案,以便它可以帮助其他人......

问题是内核TIME_WAIT。

Eredis 正在使用 gen_tcp 并且因为我在快速网络中并生成 10000 个连接许多连接处于 TIME_WAIT 状态,并且 eredis 正在使用 reuse addr to true 所以虽然我在我的代码中关闭了连接操作系统是处于 TIME_WAIT 状态的端口并且 erlang 再次尝试连接到该端口。

于 2013-07-12T07:27:04.900 回答
1

感谢您的发帖。也发布我的一些更改。

更改 eredis.hrl 从

-define(SOCKET_OPTS, [binary, {active, once}, {packet, raw}, {reuseaddr, true}])。

-define(SOCKET_OPTS, [binary, {active, once}, {packet, raw}, {reuseaddr, false}])。

于 2014-10-23T07:31:58.657 回答