这可能是我之前(未回答)问题的延续,因为根本原因可能是相同的。
我有一台运行着 nginx 和 sshd 的 Linux 服务器。它位于共享的 100mbit/s 未计量链路上。在“高峰时段”(基本上是在美国的白天),sftp 性能变得非常糟糕,有时在我什至无法连接之前就超时了。ssh 不受影响。我知道它是 nginx,因为当我停止 nginx 时,sftp 的问题会立即消失。但是,在这些“剧集”期间,nginx 本身基本上具有零延迟。
这是我的服务器长期存在的问题,我最近开始着手彻底解决它。昨天我开始怀疑 http 流量的绝对数量加上由于缺乏上行带宽引起的更大的延迟正在排挤我的 sftp 流量。我曾经tc添加一些优先级:
/sbin/tc qdisc add dev eth1 root handle 1: prio
/sbin/tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1
/sbin/tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 22 0xffff flowid 1:1
/sbin/tc filter add dev eth1 protocol ip …Run Code Online (Sandbox Code Playgroud) 我正在尝试限制容器内的带宽。我曾尝试使用以下命令,但我认为它没有生效。
cd /sys/fs/cgroup/net_cls/
echo 0x1001 > A/net_cls.classid # 10:1
echo 0x1002 > B/net_cls.classid # 10:2
tc qdisc add dev eth0 root \
handle 10: htb
tc class add dev eth0 parent 10: \
classid 10:1 htb rate 40mbit
tc class add dev eth0 parent 10: \
classid 10:2 htb rate 30mbit
tc filter add dev eth0 parent 10: \
protocol ip prio 10 \
handle 1: cgroup
Run Code Online (Sandbox Code Playgroud)
这里 A 和 B 是使用此命令创建的容器。
lxc-execute -n A -f configfile /bin/bash
lxc-execute -n …Run Code Online (Sandbox Code Playgroud) 在我的 Linux 系统上,我看到了这个:
# ip link list
....
2: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
....
Run Code Online (Sandbox Code Playgroud)
什么qdisc mq?在http://lartc.org/lartc.html 中,我只找到了有关 IMQ 的信息。
在 howto 的示例中也有qdisc noop和qdisc noqueue,但没有关于它们的详细信息。
如何限制 CentOS 服务器上的上传和下载带宽?这是一个带有单一界面的盒子,eth0. 理想情况下,我想要一个命令行解决方案(我一直在尝试使用tc),我可以在脚本中轻松打开和关闭它。
到目前为止,我一直在尝试做类似的事情,tc filter add dev eth0 protocol ip prio 50 u32 police rate 100kbit burst 10240 drop但显然我缺少很多知识和信息。有人可以帮助快速单线吗?
非常感谢,丹
我运行了下面的tc命令,它输出了高数字的重新排队,你知道这个重新排队意味着什么吗?顺便说一句,它随着时间的推移不断增加。
我看了一下man tc,但没有发现任何东西。
$ tc -s qdisc ls dev em1
qdisc mq 0: root
Sent 1760345587651 bytes 1790125037 pkt (dropped 0, overlimits 0 **requeues 135812** )
rate 0bit 0pps backlog 0b 0p **requeues 135812**
Run Code Online (Sandbox Code Playgroud) 我试图限制一个简单的 iperf 服务器和客户端之间的带宽,使用第三台被动机器作为桥梁。在没有干扰的情况下,iperf 返回约 90 Mbits/sec 的带宽。我的目标是创建一个根 qdisc,将所有未分类的流量(所有内容)发送到子 HTB 类,在那里设置我的带宽,然后路由到叶 qdisc,一旦我开始工作,将在其中设置额外的 tc 参数。我的实现很简短:
sudo tc qdisc add dev $interface root handle 1: htb default 10
sudo tc class add dev $interface parent 1:0 classid 1:10 htb rate $bandwidth burst $burst
sudo tc qdisc add dev $interface parent 1:10 handle 10:0 netem #other stuff goes here
Run Code Online (Sandbox Code Playgroud)
当这个 bash 脚本在带有$interface = eth1, $bandwidth = 500kbps,的网桥上实现时$burst = 15k,我看到 iperf 带宽有所减少,但还没有接近规定值(通常约为 5Mbps)。
我的脚本中有错误吗?我是否滥用了突发变量?请帮忙。
更新:经过进一步调查,我发现这种流量控制在应用于与 SERVER 接口的以太网卡时工作正常,但是当将相同的命令应用于 CLIENT 端时会出现问题。当整个设置颠倒时也是如此。
我目前正在研究使用 Ubuntu 服务器而不是我的消费者级路由器来提供 QoS 的机会。我已经阅读了很多关于tc和 HTB 排队规则的资源——这看起来是我需要满足我的 QoS 需求的资源,即使现在大部分看起来很清楚,仍然有一些东西让我在子类率方面感到困扰。
让我们来看看这个示例配置作为这个问题的答案:
tc class add dev eth0 parent 1: classid 1:1 htb rate 90kbps ceil 90kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 60kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 30kbps ceil 60kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 30kbps ceil 60kbps
Run Code Online (Sandbox Code Playgroud)
当您知道tc 的工作原理时,这非常简单:三个子类都保证有 30kbps 的带宽,但允许从其父类借用 30 kbps 以上的可用带宽(30 + …
我已经搜索了几天,但找不到解决我的问题的方法。
我有一个运行 Debian 7 的 VPS,我有 root 访问权限。
我正在尝试添加一些流量整形(使用 HTB),所以我尝试输入的第一行是这样的:
tc qdisc add dev tun0 root handle 1: htb default 10
Run Code Online (Sandbox Code Playgroud)
但不知何故它似乎是错误的,因为我收到以下错误:
RTNETLINK answers: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我的 ifconfig 显示了一个接口 tun0,所以它存在。无论如何,我也尝试过 venet0 并且失败并出现相同的错误。
当我这样做时,tc qdisc list我只有以下规则:
qdisc pfifo_fast 0: dev tun0 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
我真的找不到哪里出了问题。
注意:我升级了包 iproute(根据 Debian 的文档,它是 tc 所在的位置),但它并没有做得更好。
我试图在 Ubuntu 16.06 机器上简单地延迟针对特定 IP 地址的流量,但没有运气。有丰富的资源为这个 这个 这个或这是我研究。我最终得到了这两组命令,这些命令都不起作用:
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 100ms
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.19.0.2/32 flowid 1:1
Run Code Online (Sandbox Code Playgroud)
- 或者 -
tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 …Run Code Online (Sandbox Code Playgroud)