ubuntu 设置最大带宽
背景
近日做实验,需要限制一些机子的带宽以达到模拟的效果。在网上搜索了一阵子,结合自己实操的经验,潦草写下这篇文章,供自己与有需要的人参考。
环境: Ubuntu 22.04.1 LTS
安装 wondershaper 和 speedtest-cli
wondershaper 是一个用来管理带宽的工具,使用它可以快速地设置一台机子上某个网口的上行和下行最大带宽。
首先从github上拉取最新的包
git clone https://github.com/magnific0/wondershaper.git
然后安装
cd wondershaper
sudo make install
speedtest-cli 是一个测量网速的工具,可以用它来验证 wondershaper 是否设置成功。
sudo apt install speedtest-cli
安装完成后可以运行一下,测试本机当前的网速,测速过程有些慢,可能需要两三分钟。
speedtest
这是我的结果
hh@pc02:~$ speedtest
Retrieving speedtest.net configuration...
Testing from China Unicom (58.249.112.15)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Telstra International (Hong Kong) [60.86 km]: 26.282 ms
Testing download speed................................................................................
Download: 28.95 Mbit/s
Testing upload speed......................................................................................................
Upload: 35.80 Mbit/s
查看本机的网口
运行
ifconfig
即可看到本机的网口,从中选择你要设置的网口。
hh@pc02:~$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.3.5 netmask 255.255.255.0 broadcast 192.168.3.255inet6 fe80::3eec:efff:feb1:9b40 prefixlen 64 scopeid 0x20<link>ether 3c:ec:ef:b1:9b:40 txqueuelen 1000 (以太网)RX packets 91440274 bytes 105110205902 (105.1 GB)RX errors 0 dropped 3063 overruns 0 frame 0TX packets 84440960 bytes 100752219041 (100.7 GB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500ether ac:1f:6b:87:59:3a txqueuelen 1000 (以太网)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0device interrupt 16 memory 0xaae00000-aae20000
我选择对 eno1
网口进行设置。
配置 wondershaper
首先创建配置文件
sudo vim /etc/systemd/wondershaper.conf
在其中写入以下内容
[wondershaper]# Adapter
IFACE="eno1"# Download rate in Kbps
DSPEED="5120"# Upload rate in Kbps
USPEED="1024"
其中三个参数分别是想要设置的网口名称、网口下载带宽和网口上传带宽。这里我将下载带宽设置为5Mbps,上传带宽设置为1Mbps。
如果发现这个文件已经存在,则直接修改这三个参数即可,其它不用管。
然后创建以下文件
sudo vim /etc/systemd/system/wondershaper.service
在其中写入以下内容
[Unit]
Description=Bandwidth shaper/Network rate limiter
After=network-online.target
Wants=network.target[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/systemd/wondershaper.conf
ExecStart=/usr/local/sbin/wondershaper -a $IFACE -d $DSPEED -u $USPEED
ExecStop=/usr/local/sbin/wondershaper -c -a $IFACE[Install]
WantedBy=multi-user.target
注意,ExecStart和ExecStop这两个命令用到了刚刚安装的wondershaper,如果你的wondershaper不是安装在/usr/local/sbin/wondershaper
这个目录,则需要修改一下。可以通过 which wondershaper
看看包所在的目录。
启动和关闭 wondershaper
完成上一步的配置后,运行
sudo systemctl enable --now wondershaper.service
以启动wondershaper服务,开始对指定网口进行限速。
你可以通过
systemctl status wondershaper.service
查看该服务的启动情况,以下是我的结果,说明启动成功了。
h@pc02:~/wondershaper$ systemctl status wondershaper.service
● wondershaper.service - Bandwidth shaper/Network rate limiterLoaded: loaded (/etc/systemd/system/wondershaper.service; enabled; vendor preset: enabled)Active: active (exited) since Thu 2023-11-09 20:50:47 CST; 1min 48s agoProcess: 738786 ExecStart=/usr/local/sbin/wondershaper -a $IFACE -d $DSPEED -u $USPEED (code=exited, status=0/SUCCESS)Main PID: 738786 (code=exited, status=0/SUCCESS)
测试当前的网速
speedtest
可以看到网速成功降下来了
huanglab@pc02:~/wondershaper$ speedtest
Retrieving speedtest.net configuration...
Testing from China Unicom (58.249.112.15)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Telstra International (Hong Kong) [60.86 km]: 21.886 ms
Testing download speed................................................................................
Download: 4.74 Mbit/s
Testing upload speed......................................................................................................
Upload: 1.38 Mbit/s
不过上传速度好像超出了我设置的1Mbps…
总之整个过程大概就是这样啦。
如果用完想恢复原来的带宽设置,只需取消wondershaper的服务即可,运行以下命令:
systemctl disable --now wondershaper.service
。
重新用speedtest测量一下网速,应该可以恢复设置之前的样子了。
更改带宽配置
完成第一次带宽配置后,如果之后想重新配置带宽,只需修改wondershaper.conf,并且
先disable
sudo systemctl disable --now wondershaper.service
再enable
sudo systemctl enable --now wondershaper.service
相当于重新启动该服务,使用新的参数。
更方便的测试方法
过了几天发现一个更方便地测试带宽的方法,介绍如下。
假设你已经按照前面的指引安装和配置了wondershaper,接下来只需安装 iperf3。
sudo apt-get install iperf3
iperf3是一个测试工具,可以测试两台机器之间的带宽。
将一台机器作为服务端,运行:
iperf3 -s
该机器会开始监听。
将另一台服务器作为客户端,运行:
iperf3 -c [服务器的ip]
hh@:~$ iperf3 -c 192.168.3.2
Connecting to host 192.168.3.2, port 5201
[ 5] local 192.168.3.4 port 41590 connected to 192.168.3.2 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 114 MBytes 958 Mbits/sec 0 393 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 942 Mbits/sec 0 393 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 943 Mbits/sec 0 411 KBytes
[ 5] 3.00-4.00 sec 112 MBytes 942 Mbits/sec 0 411 KBytes
[ 5] 4.00-5.00 sec 112 MBytes 942 Mbits/sec 0 430 KBytes
[ 5] 5.00-6.00 sec 112 MBytes 942 Mbits/sec 0 430 KBytes
[ 5] 6.00-7.00 sec 112 MBytes 941 Mbits/sec 0 430 KBytes
[ 5] 7.00-8.00 sec 112 MBytes 941 Mbits/sec 0 430 KBytes
[ 5] 8.00-9.00 sec 112 MBytes 936 Mbits/sec 0 430 KBytes
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 430 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec receiveriperf Done.
测试大约10秒钟,这是没限制带宽之前的网速。
使用wondershaper限制客户端的带宽之后,再次测试,结果如下:
hh@:~$ iperf3 -c 192.168.3.2
Connecting to host 192.168.3.2, port 5201
[ 5] local 192.168.3.4 port 41594 connected to 192.168.3.2 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 1.00 MBytes 8.41 Mbits/sec 0 74.9 KBytes
[ 5] 1.00-2.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 2.00-3.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 3.00-4.00 sec 679 KBytes 5.56 Mbits/sec 0 74.9 KBytes
[ 5] 4.00-5.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 5.00-6.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 6.00-7.00 sec 679 KBytes 5.56 Mbits/sec 0 74.9 KBytes
[ 5] 7.00-8.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 8.00-9.00 sec 509 KBytes 4.17 Mbits/sec 0 74.9 KBytes
[ 5] 9.00-10.00 sec 679 KBytes 5.56 Mbits/sec 0 74.9 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 5.97 MBytes 5.01 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 5.55 MBytes 4.65 Mbits/sec receiveriperf Done.
可以看到网速明显地降下来了。
参考
https://averagelinuxuser.com/limit-bandwidth-linux/#install-wondershaper
https://wangchujiang.com/linux-command/c/speedtest-cli.html
相关文章:
ubuntu 设置最大带宽
背景 近日做实验,需要限制一些机子的带宽以达到模拟的效果。在网上搜索了一阵子,结合自己实操的经验,潦草写下这篇文章,供自己与有需要的人参考。 环境: Ubuntu 22.04.1 LTS 安装 wondershaper 和 speedtest-cli w…...

如何在 Python 中执行 MySQL 结果限制和分页查询
Python MySQL 限制结果 限制结果数量 示例 1: 获取您自己的 Python 服务器 选择 “customers” 表中的前 5 条记录: import mysql.connectormydb mysql.connector.connect(host"localhost",user"您的用户名",password"您的密码"…...

Django配置文件,request,链接mysql方法,Orm简介
三板斧问题(views.py) HttpResponse # 返回的是字符串render # 渲染一个HTML静态文件,模板文件redirect # 重定向的 在视图文件中得视图函数必须要接收一个形参request,并且,视图函数也要有返回值ÿ…...
ubuntu下载各个版本chrome方法
Ubuntu/debian 在这里面找版本 https://unix.stackexchange.com/a/612981然后添充进去 http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_[HERE_THE_FULL_VERSION]_amd64.deb比如:https://dl.google.com/linux/chro…...

Http状态码502常见原因及排错思路(实战)
Http状态码502常见原因及排错思路 502表示Bad Gateway。当Nginx返回502错误时,通常表示Nginx作为代理服务器无法从上游服务器(如:我们的后端服务器地址)获取有效的响应。导致这种情况的原因有很多: 后端服务器故障ngin…...

国际阿里云:无法ping通ECS实例公网IP的排查方法!!!
无法ping通ECS实例的原因较多,您可以参考本文进行排查。 问题现象 本地客户端无法ping通目标ECS实例公网IP,例如: 本地客户端为Linux系统,ping目标ECS实例公网IP时无响应,如下所示: 本地客户端为Windo…...

Nginx缓存基础
1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…...

【数据结构】Lambda
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 Lambda表达式 1. 背景1.1 语法1.2 函…...
力扣labuladong——一刷day28
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣380. O(1) 时间插入、删除和获取随机元素二、力扣710. 黑名单中的随机数 前言 常数时间删除-查找数组中的任意元素,且随机访问概率一致 如果…...

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C++语言试题
2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C语言试题 编程题第 1 题 问答题 密码锁(lock) 题目描述 小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从0到9的数字。每个拨圈都是从0到9的循环…...

华为ensp:静态默认路由
静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…...

xss 通过秘籍
终极测试代码 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT> 第一关(没有任何过滤) 使用终极测试代码,查看源码 发现没有任何过滤,直接使用javascrupt中的alert弹框 <script>aler…...

Kibana使用Watcher监控服务日志并发送飞书报警(Markdown)
Watcher是什么 Kibana Watcher 是 Elasticsearch 的监控和告警工具,它允许你设置和管理告警规则以监控 Elasticsearch 数据和集群的状态。Kibana Watcher 可以监测各种指标和数据,然后在满足特定条件时触发警报。它提供了一种强大的方式来实时监控 Elas…...

Flutter笔记:光影动画按钮、滚动图标卡片组等
Flutter笔记 scale_design更新:光影动画按钮、滚动图标卡片组 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263…...

【论文】利用移动性的比例公平蜂窝调度测量和算法
(一支笔一包烟,一节论文看一天 )(一张纸一瓶酒,一道公式推一宿) 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 ( P F ) 2 S (PF)^2S (…...

内存条选购注意事项(电脑,笔记本)
电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压,DD…...

ChatGPT 宕机?OpenAI 将中断归咎于 DDoS 攻击
您的 ChatGPT 已关闭吗?您是否遇到 ChatGPT 问题,例如连接问题或遇到“长响应时出现网络错误”?– ChatGPT 遭受了一系列 DDoS 攻击,显然是由匿名苏丹组织策划的。 OpenAI 的 ChatGPT 是一款流行的人工智能聊天机器人,…...
go单元格测试
编写单元测试(Unit Test)是一种测试方法,用于验证代码中的单个功能单元(通常是函数或方法)是否按照预期工作。以下是编写单元测试的一般步骤: 1. 创建测试文件:在项目的测试目录中创建一个新的…...
JavaScript理解表达式和语句的含义
JavaScript中的表达式和语句都是用于完成特定计算或操作的语言构件,但它们有着不同的含义和用途: 表达式(expression)是用来计算并返回一个值的代码片段,可以包含变量、数值、函数调用、运算符等。表达式的运算结果可以被赋值给变量、作为函数…...
Visual Studio导入Wiinform项目文件,引用显示黄色感叹号
参考博客 第一步: 开程序包管理控制台 vs->工具->NuGet包管理器->程序包管理控制台 Update-Package –reinstall 第二步: 删除.csproj 文件片段 // 整个模块全部删除 包括标签中所含有的任何内容 <Target Name"EnsureNuGetPackage…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...

(12)-Fiddler抓包-Fiddler设置IOS手机抓包
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求,比如 iPhone、iPad 和 MacBook 等苹…...