硬件性能 - 网络瓶颈分析
简介
本文章主要通过Linux命令查看网络信息、判断是否出现网络瓶颈等简单分析方法。其他硬件性能分析如下:
1. 硬件性能 - CPU瓶颈分析
2. 硬件性能 - 掌握内存知识
3. 硬件性能 - 磁盘瓶颈分析
目录
1. 监控命令 sar
2. 带宽利用率
3. 网络延迟
4. 网络连接数
5. 模拟网络故障
1. 监控命令 sar
sar 命令实时查看网络情况(详细命令:Linux性能监控命令_sar & 自动保存30天历史信息)
# 监控网卡信息
sar -n DEV 间隔时间 监控次数# 监控网卡异常信息
sar -n EDEV 间隔时间 监控次数# 查看历史信息(06表示本月6号,只保存1个月信息)
sar -f /var/log/sa/sa06 -n DEV
每1秒输出一次网卡信息

IFACE :网卡名
rxpck/s :每秒接收的包
txpck/s :每秒发送的包
rxkB/s :每秒接收的大小(单位 KB)
txkB/s :每秒发送的大小(单位 KB)
rxcmp/s :每秒接收的压缩包
txcmp/s :每秒发送的压缩包
rxmcst/s:每秒接收的多播包
每1秒输出一次网卡异常信息

IFACE :网卡名
rxerr/s :每秒接收错误的数量
txerr/s :每秒发送错误的数量
coll/s :每秒发生冲突的数量
rxdrop/s:每秒接收丢弃的数据包数量
txdrop/s:每秒发送丢弃的数据包数量
txcarr/s:每秒发送信号载波的数量
rxfram/s:每秒接收帧错误的数量
rxfifo/s:每秒接收的FIFO错误数量
txfifo/s:每秒发送的FIFO错误数量
txcomp/s:每秒传输完成的数量
2. 带宽利用率
监测带宽利用率可以清晰知道系统当前网络传输的整体效率。如果带宽利用率接近100%,可能意味着已经达到带宽瓶颈。
由于没有命令可以直接查看带宽利用率,我们可以用 sar 的监控结果计算,公式如下:
(接收大小 + 发送大小) / 最大传输 * 100
接收大小 (rxkB/s) 和发送大小 (txkB/s) 如 sar 监控结果:
sar -n DEV 1

传输大小查看方法
1. 先根据自己的 IP 找到网卡名
ip a

2. 在查看网卡的带宽(传输大小)
ethtool 网卡名

根据我们刚才的结果来计算
每秒接收大小:563.63 KB
每秒发送大小:1014.05 KB
最大传输大小:1000Mb/s 换算成KB:(1000/8)*1024=128000 KB
- 单位换算:1MB = 8Mb,1MB = 1024KB
按公式计算(乘以100是为了代入百分号)
( 563.63 + 1014.05 ) / 128000 * 100 = 1.23%
从结果来看,利用率非常低,无性能瓶颈
当然了,如果觉得计算不方便,可以直接看发送和接收的大小是否接近最大传输。以千兆网络为例:(1000/8)*1024=128000 KB,只需要看发送和接收大小相加是不是接近 128000 即可。如果接近这个值,说明可能存在网络瓶颈;如果相差较远,则没有网络瓶颈。
3. 网络延迟
除了带宽利用率,网络延迟也是衡量传输性能的指标之一。您可以使用工具如ping、traceroute 或者 mtr 来评估网络延迟和响应时间。如果网络延迟较高或响应时间不稳定,可能表示网络传输达到了瓶颈。
使用 ping 命令,查看另一个网络是否通畅

icmp_seq:发出ICMP回显请求
ttl :数据包的生存时间
time :从发送 ICMP 请求到接收到回应所花费的往返时间
# 最后一行
发送3包,接收3包,0%丢包,时间2060ms
从ping命令分析网络
较高的往返时间:当
ping命令输出中的往返时间较高时,表示从发送请求到接收响应所需的时间较长。一般来说,正常的往返时间应该在几毫秒或几十毫秒内。当往返时间超过100毫秒或更高时,可以认为存在网络延迟问题。延迟波动较大:
ping命令的输出中,每次往返时间的变化应保持相对稳定。如果出现明显的波动,例如从几毫秒突然跳到几百毫秒,或者时间间隔内的方差较大,那么这可能是网络连接存在延迟问题的迹象。丢包率较高:在
ping命令输出中,丢失的 ICMP 请求百分比(packet loss)较高,即未收到响应的请求占总请求数的比例较大时,可能是由于网络延迟导致请求无法到达目标主机或无法返回响应。
结合 watch 命令实时查看是否丢包(Ctrl + C 退出)
# 每3秒发送1个包
watch -n 3 ping -c 1 IP地址

4. 网络连接数
如果网络传输达到瓶颈,可能会导致网络连接的延迟增加或连接失败。当连接请求到达系统时,如果队列已满,新的连接请求将被拒绝。将会导致网络延迟增加、带宽利用率降低等问题。
连接数仅仅只能初步估计网络瓶颈,还需要考虑系统负载、带宽利用率、网络设备的能力等都可能对网络性能产生影响。更深入的网络性能分析和故障排除通常需要结合其他工具和指标来进行。
查看系统套接字最大连接数(默认128)
sysctl net.core.somaxconn

查看当前系统连接数
netstat -ant | grep ESTABLISHED | wc -l

5. 模拟网络故障
tc 命令模拟网络故障
# 模拟延迟100ms
sudo tc qdisc add dev 网卡名 root netem delay 100ms# 模拟丢包率10%
sudo tc qdisc change dev 网卡名 root netem loss 10%# 模拟网络延迟100ms,带宽限制为1Mbps
sudo tc qdisc add dev 网卡名 root handle 1:0 netem delay 100ms rate 1mbit# 模拟网络抖动,延迟100ms ± 50
sudo tc qdisc add dev 网卡名 root handle 1:0 netem delay 100ms 50ms distribution normal# 还原网络设置
sudo tc qdisc del dev 网卡名 root
相关文章:
硬件性能 - 网络瓶颈分析
简介 本文章主要通过Linux命令查看网络信息、判断是否出现网络瓶颈等简单分析方法。其他硬件性能分析如下: 1. 硬件性能 - CPU瓶颈分析 2. 硬件性能 - 掌握内存知识 3. 硬件性能 - 磁盘瓶颈分析 目录 1. 监控命令 sar 2. 带宽利用率 3. 网络延迟 4. 网络连接数 …...
stm32驱动MCP2515芯片,项目已通过测试
最近公司做一个项目,需要3路can通道,但是stm32看了很久,最多也就只有2个can,所以找到了一款MCP2515芯片,可以用spi驱动can。 已经实现了can的发送和接收,接收采用的是外部中断接收的方式。和单片机本身带的…...
Nginx部署前后端分离项目
dev.env.js解释 //此文件时开发环境配置文件 use strice//使用严格模式 const merge require(webpacl-merge)//合并对象 const prodEnv require(./prod.env)//导出 module.exports merge(prodEnv,{//合并两个配置文件对象并生成一个新的配置文件,如果合并的过程…...
pytorch多分类问题 CrossEntropyLoss()函数的输入size/shape不一致问题
在使用pytorch实现一个多分类任务的时候,许多多分类任务在训练过程中都会有如下的代码: criterion nn.CrossEntropyLoss() loss criterion(output, target) # output.size : [batch_size, class_num] # target.size : [batch_size]许多的初学者会卡在…...
硬盘或者U盘提示需要格式化的解决办法
插入硬盘之后提示: 使用驱动器 G:中的光盘之前需要将其格式化 是否要将其格式化? 如下图所示 顿时慌了啊,里面还有比较重要的东西呢,这一下子完蛋? 遇事找某宝,上面估计有这种技术服务。果然有这一类的技术服务&…...
Clip-Path
前言 借助clip-path,我们可以实现一些复杂的animation动画效果,我们先来简单概述一下它的特性,如MDN所描述的。 The clip-path CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, whi…...
Matlab绘图系列教程-Matlab 34 种绘图函数示例(下)
Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化第一部分:入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …...
【Vue+Django】Training Management Platform Axios并发请求 - 20230703
需求陈述 由于API是特定单位/特定类别/特定教学方式的数据,故汇总数据需要循环请求不同单位/不同类别/不同教学方式。 技术要点 1.axios并发请求 2.JS for循环 3.Vue数组中出现 ob :Observer无法取值问题的解决方法 4.将数据转化为数组 5.一次请求所有数据后&…...
smart Spring:自定义注解、拦截器的使用(更新中...)
文章目录 〇、使用自定义注解的好处和工作原理一、如何使用自定义注解1.自定义一个注解2.在类、属性、方法上进行使用3.元注解 二、使用拦截器的好处和工作原理三、如何使用拦截器参考 本博客源码: 〇、使用自定义注解的好处和工作原理 自定义注解是Java语言提供的…...
php导出pdf
插件官网:TCPDF 博主用的是tp6框架 、tcpdf插件 composer require tecnickcom/tcpdf --ignore-platform-reqs 后面是忽略平台要求的参数 ---------------中文乱码start------------------ 关于中文乱码问题: 网上说的下载字体放入fonts 利用tools…...
【ECMAScript6_2】字符串
1、字符的Unicode表示法 ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。(\u0000-\uFFFF) 码点超过取值范围之后不能正确解读,但是只要给码点加上{}就可以正确解读。 …...
37.RocketMQ之Broker消息存储源码分析
highlight: arduino-light 消息存储文件 rocketMQ的消息持久化在我们在搭建集群时都特意指定的文件存储路径,进入指定的store目录下就可以看到。 下面介绍各文件含义 CommitLog 存储消息的元数据。produce发出的所有消息都会顺序存入到CommitLog文件当中。 CommitLog由多个文件…...
RabbitMq应用延时消息
一.建立绑定关系 package com.lx.mq.bind;import com.lx.constant.MonitorEventConst; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annota…...
【WEB自动化测试】- 浏览器操作方法
一、常用方法 1. maximize_window() 最大化窗口 (重点) 说明:如果能够在打开页面时,全屏显示页面,就能尽最大可能加载更多的页面,提高可定位性 2. set_window_size(width, height) 设置浏览器窗口的大小 (了解) 场景࿱…...
VSCode设置鼠标滚轮滑动设置字体大小
1:打开"文件->首选项->设置 2 :打开settings.json文件 英文版这里有个坑 一般点击我下图右上角那个{ } 就可以打开了 在 设置的json 文件中加入如下 “editor.mouseWheelZoom”: true { “editor.mouseWheelZoom”: true, “json.schemas”: [ ]}...
Spring MVC是什么?详解它的组件、请求流程及注解
作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解Spring MVC是什么,它的优缺点与九大组件,以及它的请求流程与常用的注解。 目录 一、Spring MVC是什…...
基于Spring Boot的广告公司业务管理平台设计与实现(Java+spring boot+MySQL)
获取源码或者论文请私信博主 演示视频: 基于Spring Boot的广告公司业务管理平台设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 后端:Java springboot框架 …...
docker 基本命令安装流程
docker 基本命令安装流程 1.更新Ubuntu的apt源索引 $ sudo apt-get update2.安装包允许apt通过HTTPS使用仓库 $ sudo dpkg --configure -a $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common3.添加Docker官方GPG key $ curl -f…...
尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】
尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…...
【LeetCode每日一题合集】2023.7.3-2023.7.9
文章目录 2023.7.3——445. 两数相加 II(大数相加/高精度加法)2023.7.4——2679. 矩阵中的和2023.7.5——2600. K 件物品的最大和(贪心)代码1——贪心模拟代码2——Java一行 2023.7.6——2178. 拆分成最多数目的正偶数之和&#x…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
