linux提示:connect: Resource temporarily unavailable

日志信息

ping 127.0.0.1
connect: Resource temporarily unavailable

127.0.0.1 是本地回环地址,ping 都连不上,说明问题 发生在本机的网络栈层面,而不是目标服务器或者路由的问题。


分析解决

1.文件描述符 / 套接字耗尽

Linux 系统对进程或者全局可用套接字数量有限制,如果被耗尽,会出现 “Cannot assign requested address” 或者 “Resource temporarily unavailable”。

检查当前系统限制:

1
2
ulimit -n        # 查看单个进程最大文件描述符
cat /proc/sys/fs/file-max # 系统全局文件描述符上限

查看当前使用情况:

1
2
lsof | wc -l
ss -s

如果发现使用量接近上限,就是原因。


2.网络栈或内核资源耗尽

可能有大量 TCP 连接(尤其是 TIME_WAITSYN_SENT)占用内核资源。

1
2
3
ss -s
ss -tan | wc -l
cat /proc/net/sockstat

关键指标:

  • TCP: inuse(占用 TCP 套接字)
  • TCP: orphan(孤立套接字)

如果 inuse 接近 file-max 或系统极限,会导致无法再分配新套接字。


3.内核参数限制

可能有内核参数过小,导致 ephemeral port 或 TCP 套接字不足。

1
2
3
4
sysctl net.ipv4.ip_local_port_range  # 白名单
sysctl net.ipv4.ip_local_reserved_ports # 黑名单
sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.ipv4.tcp_fin_timeout

最终发现是:黑名单和白名单一致1024,65535导致问题


4.临时解决思路

  • 重启网络服务:

    1
    systemctl restart network
  • 如果情况紧急,可以重启机器释放所有资源(尤其是在高并发 SSH 隧道/连接占用下)。

  • 优化内核:

1
2
3
4
5
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.ip_local_reserved_ports=""

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30

💡 结论:
你的问题 不只是 SSH,连本地回环都无法连接,说明整个网络栈资源耗尽(黑名单导致的)。重点检查 套接字/文件描述符耗尽,必要时重启网络或系统。