TIME_WAIT 连接过多,出现“无法分配请求的地址”

2023-12-08

我有一个小型 Web 应用程序,它打开 TCP 套接字连接、发出命令、读取响应,然后关闭对特定 REST 端点的每个请求的连接。

我已经开始使用 Apache JMeter 对端点进行负载测试,并注意到运行一段时间后,我开始看到诸如“无法分配请求的地址”之类的错误,打开此连接的代码是:

def lookup(word: String): Option[String] = {
 try {
  val socket = new Socket(InetAddress.getByName("localhost"), 2222)
  val out = new PrintStream(socket.getOutputStream)
  val reader = new BufferedReader(new InputStreamReader(socket.getInputStream, "utf8"))
  out.println("lookup " + word)
  out.flush()

  var curr = reader.readLine()
  var response = ""
  while (!curr.contains("SUCC") && !curr.contains("FAIL")) {
    response += curr + "\n"
    curr = reader.readLine()
  }
  socket.close()
  curr match {
    case code if code.contains(SUCCESS_CODE) => {
      Some(response)
    }
    case _ => None
  }
 }
 catch {
   case e: Exception => println("Got an exception "+ e.getMessage); None
 }
}

当我运行 netstat 时,我还看到许多以下 TIME_WAIT 连接状态,这对我来说意味着我用完了临时空间中的端口。

tcp6       0      0 localhost:54646         localhost:2222          TIME_WAIT  
tcp6       0      0 localhost:54638         localhost:2222          TIME_WAIT  
tcp6       0      0 localhost:54790         localhost:2222          TIME_WAIT  
tcp6       0      0 localhost:54882         localhost:2222          TIME_WAIT 

我想知道这个问题的最佳解决方案是什么。我当前的想法是创建一个连接池,其中与在端口上运行的该服务的连接2222可以被不同的HTTP请求重用,而不是每次都创建新的请求。这是解决问题并使应用程序扩展更好的明智方法吗?引入似乎需要很大的开销,并且肯定会让我的应用程序变得更加复杂。

是否还有其他解决方案可以帮助该应用程序扩展并克服我没有看到的端口问题?我的 Web 应用程序在 Ubuntu Linux VM 中运行。


是的,创建连接池是一个很好的解决方案。然而,更简单的解决方案是让服务器而不是客户端关闭连接。在这种情况下,服务器的套接字(而不是客户端的套接字)最终将处于 TIME_WAIT 状态,因此客户端不会耗尽端口。在服务器端,处于 TIME_WAIT 状态的连接不会使服务器耗尽端口,因为它们都使用相同的本地端口。

为了确保服务器关闭连接,您需要从套接字(在客户端上)读取数据,直到达到文件结束条件。此时,在客户端关闭套接字是安全的,因为服务器已经关闭了它。当然,您需要确保服务器将关闭套接字,而不是等待新请求。

或者,如果您有 root 访问权限,则有一些sysctl您可以调整的选项:

  • net.ipv4.ip_local_port_range– 临时端口范围。增加它以使更多端口可用于传出连接。
  • net.ipv4.tcp_tw_recycle– 能够更快地回收处于 TIME_WAIT 状态的连接。
  • net.ipv4.tcp_tw_reuse– 允许重用处于 TIME_WAIT 状态的连接。不建议。

请参阅手册页ip(7) and tcp(7)了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TIME_WAIT 连接过多,出现“无法分配请求的地址” 的相关文章

  • Scala 如何忽略 Java 的检查异常?

    例如如果调用 JavaThread sleep这会抛出一个已检查的InterruptedException来自 Scala 源文件 然后不需要将调用包含在 Scala 中try catch Scala 如何删除将调用包围在 a 中的规则tr
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 伪TCP通道

    什么是伪 TCP 通道以及如何实现 伪 TCP 是一种协议 它实现了 TCP 的一些思想 通过不可靠的基于数据包的接口提供可靠的数据流 例如 如果您只能访问 UDP 但想要 一种可靠的方式来传递数据 则可以使用此方法 您可以在这里找到示例代
  • 如何在线程创建和退出时调用函数?

    include
  • 在 Scala 和 SBT 中调试较长的编译时间

    在我的 Scala SBT 项目中 我有一个文件需要 5 分钟才能编译 所有其他的都可以在几秒钟内编译 这使得开发非常痛苦 我确信我滥用了一些 Scala 构造 但我不知道如何调试它 如何在 Scala 中调试较长的编译时间 我正在使用 S
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • Android设备到PC的socket连接

    我面临着建立从 Android 设备到 PC 的特定端口的套接字连接的问题 例如8080 我只想创建一个套接字 它将连接到特定端口并在该端口上写入一些数据流 我为此目的编写了一些代码 但代码给了我一个例外 TCP Error java ne
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • 缓存 Slick DBIO 操作

    我正在尝试加快 SELECT FROM WHERE name 的速度Play 中的查询类型 Scala 应用程序 我正在使用 Play 2 4 Scala 2 11 play slick 1 1 1 包 该软件包使用Slick 3 1版本
  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写
  • Scala 特性:val/def 和 require

    下面的代码抛出IllegalArgumentException trait T val x Long require x gt 0 object T extends App val y new T val x 42L 而以下情况则不然 tr
  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 在 Scala 中,使用“_”和使用命名标识符有什么区别?

    为什么当我尝试使用时会出现错误 而不是使用命名标识符 scala gt res0 res25 List Int List 1 2 3 4 5 scala gt res0 map gt item toString

随机推荐

  • 带有嵌入字体的 @font-face 不起作用

    我有网站 http kuvaklubi fi我尝试使用字体的地方 Century Gothic 我的电脑上不存在此字体 Installed fonts 我想通过以下方式将此字体嵌入到 css 中 font face 我已经生成了一些字体文件
  • django.db.backends.dummy 和 django.db.backends.mysql 有什么区别?

    django db backends dummy 和 django db backends mysql 有什么区别 我发现有人使用dummy和mysql 但我搜索后不知道他们的区别 django db backends mysql后台数据库
  • 获取类层次结构的所有字段[重复]

    这个问题在这里已经有答案了 我有课 ClassA public String filedA ClassB extends ClassA public String filedB ClassC extends ClassB public St
  • 使用spatiallite 将 GIS 缓冲值度以米为单位

    我是 Spatialite 的新手 我有以下查询 select A from linka as A pointa as B where Contains Buffer B Geometry 100 A Geometry 我实际上想创建 10
  • 强制一种方法等待另一种方法完成

    在我的原始视图控制器中 在转到目标视图控制器之前 我调用一个获取关键参数的方法 然后在以下方法中在目标视图控制器中设置关键参数 然而 关键参数是在之前设置的doSomethingToGetKey方法已完成 因此传递了一个空值 我想知道是否有
  • 如何创建自己的资源名称?

    我可以在中使用我自己的资源名称吗themes xml 例如
  • 由于未注册 Windows.Launch 合同,Windows 10 分配的访问应用程序无法启动

    我有一个 WPF 应用程序 我已使用以下命令将其转换为 UWP 应用程序DesktopAppConverter为了运行它分配的访问权限模式 转换后的应用程序在非分配访问模式下运行时可以工作 可以安装并正常运行 但是 当我将其设置为分配的访问
  • 无法使用 cURL 将 SSH 密钥发送到 Github

    我正在尝试将我的公共 ssh 密钥发送到 Github 我将密钥设置为 shell 中的变量 但它给出了key is invalid You must supply a key in OpenSSH public key format错误
  • 在堆栈弹出中反应本机路由通量重新渲染组件

    如何重新运行 React 组件生命周期方法来确定在从堆栈转换回以前的屏幕时是否需要重新渲染React Native 路由器 Flux 设想 场景 A gt B gt A 假设 A 是初始场景 我们使用 a 从 A 导航到 B推即 Actio
  • 为什么我们先复制然后移动?

    我在某处看到代码 其中有人决定复制一个对象 然后将其移动到类的数据成员 这让我感到困惑 因为我认为移动的全部目的是为了避免复制 这是示例 struct S S std string str data std move str 这是我的问题
  • 带有列表和字典的嵌套循环

    所以我有点陷入了一个问题 本质上 我想使用列表和字典运行一个嵌套循环 但我似乎不知道如何操作 我的用例是运行一个 playbook 它将通过使用主体列表签署公钥来生成 SSH 证书 我有一个充当跳转主机的主机列表 称为 bastionHos
  • 如何获取java日历中每月第一个星期三的日期

    我如何使用java日历类获取该月下一个第一个星期三的日期 例如 Today 24 03 2012 the next first Wednesday will be 04 04 2012 On 05 04 2012 the next firs
  • 这个预提交钩子如何修复尾随空格?

    发生了什么事这个预提交钩子 我认为更改文件会导致它们被重新暂存 bin sh A git hook script to find and fix trailing whitespace in your commits Bypass it w
  • x86-64 分段错误保存堆栈指针

    我目前正在关注本教程 但我不是那所学校的学生 GDB 给我一个分段错误thread start在线上 movq rsp rdi save sp in old thread s tcb 当我回溯时 这是附加信息 0 thread start
  • 如何使用 JPA 映射 Duration 类型

    我在一个类型的类中有一个属性字段javax xml datatype Duration 它基本上代表一个时间跨度 例如 4 小时 34 分钟 JPA 告诉我这是一个无效类型 这并没有让我感到震惊 这有什么好的解决办法吗 我可以实现我自己的
  • 如何将输出写入 Android 中的日志?

    我想将一些调试输出写入日志以使用 logcat 进行查看 如果我向 System out 写入一些内容 则该内容已显示在 logcat 中 写入日志并向输出添加级别和标签的干净方法是什么 调查android util Log 它允许您写入具
  • 如何捕获 Flash 影片成功加载时的事件触发?

    我目前正在使用 jQuery 以及 swfObject 将 swf 影片动态嵌入到我的网页中 我目前在将 immem 的音乐播放器嵌入我的网页时遇到问题 因为他们的嵌入代码没有任何加载屏幕 因此 当我使用 swfObject 替换元素时 该
  • 从 res/raw 文件夹设置铃声

    我正在尝试在中设置音频文件 res raw 以编程方式将文件夹作为默认铃声 我有以下文件 如下所示 myapp res raw file mp3 我有以下代码 但不幸的是它完全无法设置铃声 我不确定是什么导致了这个问题 但想知道是否有人有任
  • django-admin.py:找不到命令(bluehost 服务器)

    经过6个多小时的挣扎 我决定寻求帮助 任务 在Django的帮助下创建一个项目工具 Windows Vista Putty SSH地点 Bluehost www bluehost com 服务器 我已经阅读过有关同一问题的这些主题 bash
  • TIME_WAIT 连接过多,出现“无法分配请求的地址”

    我有一个小型 Web 应用程序 它打开 TCP 套接字连接 发出命令 读取响应 然后关闭对特定 REST 端点的每个请求的连接 我已经开始使用 Apache JMeter 对端点进行负载测试 并注意到运行一段时间后 我开始看到诸如 无法分配