如何在Linux/Debian系统中为SSH预留带宽?
如何在Linux/Debian系统中为SSH预留带宽?
太懂这种烦恼了!当大下载把带宽占满时,SSH直接卡到连输入都没反应,简直抓狂。你说的trickle有时候确实不管用,大概率是因为目标程序(比如ollama)可能用了静态链接或者绕过了trickle能监控的网络调用方式。给你几个亲测有效的办法:
方法一:用内核自带的tc工具(最靠谱,底层控制)
tc是Linux内核自带的流量控制工具,能直接在网卡层面分配带宽,优先级最高,几乎没有例外情况。步骤如下:
- 先确认你的网卡名称,执行
ip link show,输出里类似eth0、enp0s3的就是。 - 清理网卡上旧的流量规则(如果有的话):
sudo tc qdisc del dev eth0 root - 添加根队列,设置默认流量类:
sudo tc qdisc add dev eth0 root handle 1: htb default 10 - 创建主类,分配网卡总带宽(假设你的总带宽是1000Mbps,根据实际情况调整):
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit - 给SSH(默认22端口)创建专属带宽类,预留100Mbps(保证SSH随时有可用带宽):
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 1000mbit - 给其他普通流量创建类,限速到900Mbps(总带宽减SSH预留的部分):
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 900mbit ceil 1000mbit - 把SSH的上下行流量都导向专属类:
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 22 0xffff flowid 1:10 sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 22 0xffff flowid 1:10
这样设置后,SSH流量会优先占用预留的100Mbps,哪怕其他下载跑满剩余带宽,SSH也能保持流畅。
方法二:用wondershaper(简化版tc,操作更友好)
如果觉得tc命令太复杂,可以用wondershaper,它是tc的封装工具,一键就能配置带宽预留:
- 先安装工具:
sudo apt install wondershaper - 直接给网卡设置总带宽和预留的最小保障带宽(这里假设总下载带宽1000Mbps,给SSH预留100Mbps):
参数说明:第一个数字是网卡的最大下载带宽(Mbps),第二个是最大上传带宽(Mbps),wondershaper会自动给SSH、DNS这类关键服务预留带宽。如果需要更精细控制,可以编辑sudo wondershaper eth0 1000 100/etc/default/wondershaper配置文件,把需要优先的端口(比如22)添加进去。
方法三:修复trickle的使用方式
如果还是想用trickle,可以试试换个启动方式——因为trickle是用户空间工具,只能监控通过动态链接libc的程序。如果直接给ollama命令加trickle没用,你可以用trickle启动整个shell,再在shell里运行ollama:
trickle -s -d 200 bash
然后在这个新打开的bash里执行:
ollama pull llama3
这样整个shell里的所有网络请求都会被trickle限速,就能避免占满带宽了。
备注:内容来源于stack exchange,提问作者Morten
相关产品推荐
相关产品推荐

