V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
AllenHua
V2EX  ›  OpenWrt

Linux (openwrt) 出现太多 TIME_WAIT 状态的连接导致程序无法访问,怎么解决?

  •  
  •   AllenHua · 2021-03-06 13:54:51 +08:00 · 372 次点击
    这是一个创建于 1210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主用的是 lean 的 openwrt 设备,cpu 是 n3150,之前发现机器中的 qbittorrent-nox 程序运行了一段时间之后 web 页面就无法访问了,使用 netstat 查看发现有很多的 TIME_WAIT 状态的连接。我试图按照一些教程中的建议做了修改,但是没有起作用。挂了将近 700 个种子,检查 cpu 和内存占用发现 cpu 和内存应该不是问题所在(没有性能瓶颈)。特来求助

    6nsMOH.png

    ⬆️️ TIME_WAIT 状态的连接数会逐渐增多

    6nsJtP.png

    ⬆️️ TIME_WAIT 连接数量已经从 51 增长到了 294

    尝试添加以下参数

    6nshnJ.png

    ⬆️️ 但是提示 net.ipv4.tcp_tw_recycle is an unknown key 后面发现是目前正在使用的 Linux 内核版本超过了 4.12

    root@softRouter:~# uname -a
    Linux softRouter 4.19.108 #0 SMP Tue Mar 31 15:14:35 2020 x86_64 GNU/Linux
    

    可以看出 Linux 内核版本 4.19.108 官方已经移除了 net.ipv4.tcp_tw_recycle ,可参考下面这篇文章

    "被抛弃的 tcp_recycle" https://juejin.cn/post/6844903730874171405

    网上能搜索到很多文章,比如下面这两篇

    网上搜到的大多都是调整那几个参数,贴一段解释:

    正常情况下,TCP 连接断开后,会以“TIME_WAIT”状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的这样的等待状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化 TCP 的内核参数,来及时将该状态的端口清理掉。
    出现“TIME_WAIT”意味着你的程序时常有主动关闭连接的行为,属于正常行为,可以设置地址可重用。
    如果系统存在大量“TIME_WAIT”状态的连接,可以通过调整内核参数解决。

    求不吝赐教

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5376 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:16 · PVG 14:16 · LAX 23:16 · JFK 02:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.