我在使用通过 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 问题,因为ls
或cat
也是导致该问题的原因。该设备与其他设备相同吗?您可以尝试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