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…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
