接收大量数据时 SSH 连接冻结

接收大量数据时 SSH 连接冻结

我在使用通过 SSH 连接的一系列 GNU/Linux 工业设备时遇到问题。配置非常基本,因为我没有对服务器进行任何更改,而在客户端,我只有以下配置.ssh/config

Host <hostname>
    User <username>
    Port <port>

我面临的问题是,每当我执行生成大量输出的命令(例如带有长结果的 ls、apt Upgrade 或对大文件执行 cat)时,SSH 连接就会变得无响应并且不执行任何操作。它似乎被卡住或冻结。

我不确定是什么原因导致这个问题。是否与 SSH 配置或其他因素有关?任何帮助或建议将不胜感激。

这似乎是 SSH 服务器所在网络的问题,因为具有相同配置的其他设备没有任何问题。但是,我无权修改网络;我只能控制我自己的服务器。有没有办法限制服务器的资源,以提高使用服务器时的可访问性和性能?

答案1

我最终通过将以下行添加到 OpenVPN 配置文件中解决了这个问题:

mssfix 1410

这意味着 OpenVPN 配置为将最大分段大小 (MSS) 设置为 1410 字节。 MSS 在网络连接中很重要,因为它决定了可以通过连接发送的数据包的最大大小。当大数据包可能在网络上遇到碎片或出现性能问题时,较低的 MSS 值会很有用。设置较低的 MSS 值可以帮助避免这些问题。

答案2

它看起来更像是 CPU 问题,因为lscat也是导致该问题的原因。该设备与其他设备相同吗?您可以尝试top在运行大型ls.如果是这样,您可以尝试在命令前面加上nice -n 10这样的内容:nice -n 10 ls这样您的所有命令都将被取消优先级。

如果您想探索网络部分,并且您的设备没有最小内核,您可以尝试使用 bbr 来防止网络缓冲区饱和,并使用 fq_codel 来实现流之间更好的共存:

cat << EOF > /etc/sysctl.d/99-network.conf
net.core.default_qdisc=fq_codel
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl --system

如果您确定它是网络,并且 bbr / fq_codel 不能完成这项工作,并且您有一个带有 的内核,则可以使用 ssh和 htbtc设置流量整形并保留带宽。tc

相关内容