【问题标题】:Does it affect the performance of server if many socket connections are in TIMEWAIT state如果许多套接字连接处于TIMEWAIT状态,是否会影响服务器的性能
【发布时间】:2013-07-31 18:19:47
【问题描述】:

假设我有 15000 个处于 TIMEWAIT 状态的连接会影响性能吗?问题是我正在从 erlang 连接到 redis 并且我得到 redis 超时并且我正在触发许多查询让我们说 15000 在 1-2 秒内。

  • 问题不在于套接字限制

我打开连接触发查询并关闭导致许多连接处于 TIMEWAIT 状态的连接,这对我来说没问题,因为我有 60k 可用套接字。

在 erlang 方面,我有 20 秒的 timewait 时间,我认为这足以完成任务,因为 redis 非常快。

可能是什么问题?顺便说一句,我正在使用 eredis 作为库

【问题讨论】:

  • 也许是 google 的 C10K 问题
  • 究竟是什么问题?听起来您应该在客户端使用连接池。
  • 问题是redis返回超时问题..所以如果我有65000个套接字并且我正在使用大约18000个并且redis性能很好并且网络速度很好那么为什么超时?我想确切地知道为什么会有超时,瓶颈是什么..
  • @Basile.. 谢谢我正在使用 erlang 牛仔,我认为它解决了 CK10 问题
  • 您没有“65000 个套接字”。您有 64k 端口,但所有传入连接都使用与它们连接的侦听套接字相同的端口号,因此您可以拥有比 64k 套接字多很多倍的端口号。处于 TIME_WAIT 状态的端口不会消耗任何 CPU。您是否遇到连接超时或读取超时?

标签: linux sockets tcp erlang scalability


【解决方案1】:

不随心所欲地打开与redis的连接,而是有一个稳定的连接池会更有效。您将消除每次启动 tcp 会话的大量开销。 此外,您可能会遇到“打开的文件太多”错误。

考虑调整您的/etc/sysctl.conf(如果您使用的是 linux)。这个参数绝对值得一看:

  • net.ipv4.tcp_tw_recycle
  • net.ipv4.tcp_tw_reuse
  • net.ipv4.tcp_fin_timeout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多