城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

关于Linux性能调优中网络IO的一些笔记

3月11日 长歌行投稿
  写在前面和小伙伴分享一些Linux网络优化的笔记,内容很浅,可以用作入门博文内容结合《Linux性能优化》读书笔记整理涉及内容包括常用的优化工具(miitool,ethtool,ifconfig,ip,sar,iptraf,netstat)使用Demo及对应的输出解释具体的调优策略步骤食用方式:需要了解Linux基础,网络分层相关知识没有完整的调优Demo,只是提供的一些方向。关于调优工具,你可以学习到确定系统内以太网设备的带宽和双工设置(miitool、ethtool)。确定流经每个以太网接口的网络流量(ifconfig、sar、iptraf、netstat)。确定流入和流出系统的IP流量的类型(iptraf、netstat)。确定流入和流出系统的每种类型的IP流量(iptraf)。确定是哪个应用程序产生了IP流量(netstatp)。理解不足小伙伴帮忙指正
  理性的人寻求的不是快乐,而是没有痛苦。叔本华
  学习网络调优工具之前,简单温习一下网络IO相关的知识涉及名词解释
  带宽(传输速率):数据传输的过程中,两个设备之间数据流动的物理速度称为传输速率,单位为bps(BitsPerSecond,每秒比特数),传输速率不是指单位数据流动的速度,而是指单位时间内传输的数据量有多少。传输速率有被称之为带宽(Bandwidth),带宽越大网络传输能力就越强。
  吞吐量:主机之间的实际的传输速率被称为吞吐量,单位与带宽相同,吞吐量还衡量CPU处理能力,网络的拥堵程度,报文中数据字段的占有份额。
  网卡:网络接口卡,也称网络适配器,网卡,LAN卡。联网时必须使用。
  路由器:在OSI模型的第3层网络层面上连接两个网络(路由寻址,类似送快递)、并对分组报文进行转发的设备。涉及路由控制表(静态路由,动态路由OSPF,默认路由)
  交换机:在OSI模型的第2层数据链路层上连接局域网的主要设备,交换机能够根据以太网帧中目标地址智能的转发数据,涉及地址转发表(通过MAC地址学习记录实际的MAC地址本身)
  包,数据帧,数据报,段,消息:包为全能性术语,帧表示数据链路层中包的单位,而数据报是IP和UDP等网络层以上的分层中包的单位,段则表示TCP数据中流的信息,消息是指应用协议中数据的单位。网络IO介绍
  Linux和其他主流操作系统中的网络流量被抽象(协议分层与OSI参考模型)为一系列的硬件和软件层次。在每个分层上,发送端添加首部包装信息,经过路由器,接受端分离首部恢复数据。当然路由器的传递也涉及网络层和链路层的首部分离和添加。简单回顾下
  在OSI分层中,链路层包含网络硬件,如以太网设备。在传送网路流量时,这一层并不区分流量类型,而仅仅以尽可能快的速度发送和接收数据包(或帧)。
  链路层的上面是网络层。使用互联网协议(IP)和网际控制报文协议(ICMP)在机器间寻址并路由数据包。IPICMP尽其最大努力尝试在机器之间传递数据包,但是它们不能保证数据包是否能真正达到其目的地。
  网络层的上面是传输层,它定义了传输控制协议(TCP)和用户数据报协议(UDP)。TCP是一个可靠协议,它可以保证消息通过网络送达,如果消息无法送达它就会产生一个错误。TCP的同级协议UDP,则是一个不可靠协议,它无法保证信息能够送达(为了获得最高的数据传输速率)。
  UDP和TCP为IP增加了服务的概念。UDP和TCP接收有编号端口的消息。按照惯例,每个类型的网络服务都被分配了不同的编号即端口。超文本传输协议(HTTP)通常为端口80安全外壳(SSH)通常为端口22文件传输协议(FTP)通常为端口23。〔rootvms81。liruilongs。github。io〕〔〕catetcservicesgrepEhttpssshsftpssortftp21sctpFTPftp21tcpftp21udpfspfspdhttp80sctpHyperTextTransferProtocolhttp80tcpwwwwwwhttpWorldWideWebHTTPhttp80udpwwwwwwhttpHyperTextTransferProtocolssh22sctpSSHssh22tcpTheSecureShell(SSH)Protocolssh22udpTheSecureShell(SSH)Protocol〔rootvms81。liruilongs。github。io〕〔〕
  在Linux系统中,文件etcservices定义了全部的端口以及它们提供的服务类型。
  传输层层上面为应用层。这一层包含了各种应用程序,它们使用下面各层在网络上传输数据包。
  Linux内核实现或控制的是最低三层(链路层、网络层和传输层)。内核可以提供每层的性能统计信息,包括数据流经每一层时的带宽使用情况信息和错误计数信息。链路层的网络流量
  Linux可以侦测到流经链路层的数据流量的速率。
  链路层,通常是以太网,以帧序列的形式将信息发送到网络上。不管应用层的交互方式是什么,链路层也会将它们分割为帧,再发送到网络上。数据帧的最大尺寸被称为最大传输单位(MTU)。可以使用网络配置工具,如ip或ifconfig来设置MTU。
  k8s集群机器所有有好多Calico虚拟网卡〔rootvms81。liruilongs。github。io〕〔〕ifconfiggrepmtucali12cf25006b5:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480cali13a4549bf1e:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480cali45e02b0b21e:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480cali5a282a7bbb0:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480cali86e7ca9e9c2:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480calicb34164ec79:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1480docker0:flags4099UP,BROADCAST,MULTICASTmtu1500ens32:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1500lo:flags73UP,LOOPBACK,RUNNINGmtu65536tunl0:flags193UP,RUNNING,NOARPmtu1480〔rootvms81。liruilongs。github。io〕〔〕
  就以太网而言,最大大小一般为1500字节,虽然有些硬件支持的巨型帧可以高达9000字节。MTU的大小对网络效率有直接影响。
  链路层上的每一个帧都有一个小容量的头部,因此,使用大尺寸的MTU就提高了用户数据对开销(头部)的比例。但是,使用大尺寸的MTU,每个数据帧被损坏或丢弃的几率会更高。
  对单一物理链路来说,大尺寸MTU通常会带来更好的性能,因为它需要的开销更小;反之,对嘈杂的链路(链路聚合)来说,更小的MTU则通常会提升性能,因为,当单个帧被损坏时,它要重传的数据更少。
  在物理层,帧流经物理网络,Linux内核可以收集大量有关帧数量和类型的不同统计数据:发送接收:如果一个帧成功地流出或流入机器,那么它就会被计为一个已发送或已接收的帧。错误:有错误的帧(可能是因为网络电缆坏了,或双工不匹配)。丢弃:被丢弃帧的(很可能是因为内存或缓冲区容量小)。溢出:由于内核或网卡有过多的帧,因此被网络丢弃的帧。通常这种情况不应该发生。帧:由于物理级问题导致被丢弃的帧。其原因可能是循环冗余校验(CRC)错误或其他低级别的问题(这个分类有些搞不懂?)。多播:这些帧不直接寻址到当前系统,而是同时广播到一组节点。压缩:一些底层接口,如点对点协议(PPP)或串行线路网际协议(SLIP)设备在把帧发送到网络上之前,会对其进行压缩。该值表示的就是被压缩帧的数量。
  有些Linux网络性能工具能够显示通过每一个网络设备的每一种类型的帧数。这些工具通常需要设备名,因此,熟悉Linux如何对网络设备命名以便搞清楚哪个名字代表了哪个设备是很重要的。
  以太网设备被命名为ethN,正常,eth0指的是第一个设备,ethl指的是第二个设备,以此类推。与以太网设备命名方式相同,PPP设备被命名为pppN。环回设备,用于与本机联网,被命名为lo。〔rootvms81。liruilongs。github。io〕〔ansible〕ifconfiglolo:flags73UP,LOOPBACK,RUNNINGmtu65536inet127。0。0。1netmask255。0。0。0inet6::1prefixlen128scopeid0x10hostlooptxqueuelen1(LocalLoopback)RXpackets10250705bytes2227288333(2。0GiB)RXerrors0dropped0overruns0frame0TXpackets10250705bytes2227288333(2。0GiB)TXerrors0dropped0overruns0carrier0collisions0协议层(传输层)网络流量
  对TCP或UDP流量而言,Linux使用套接字端口来抽象两台机器的连接。当与远程机器连接时,本地应用程序用一个网络套接字来打开远程机器上的一个端口。
  Linux网络性能工具可以跟踪流经特定网络端口的数据量。由于每个服务的端口号具有唯一性,因此有可能确定流向特定服务的物理流量。网络性能工具miitool(媒体无关接口工具)
  miitool是以太网专用硬件工具,主要用于设置以太网设备,但它也可以提供有关当前设置的信息。诸如链接速度和双工设置,对于追踪性能不佳设备的成因是非常有用。
  miitool已经过时了,推荐使用ethtool,一般也不会怎么使用,书里有讲,我们简单看下〔rootvms81。liruilongs。github。io〕〔〕manmiitoolgrepobsoleteThisprogramisobsolete。Forreplacementcheckethtool。〔rootvms81。liruilongs。github。io〕〔〕
  我这里是CentOS7虚机,所以网卡为eth32系统上eth32的配置信息。〔rootvms81。liruilongs。github。io〕〔ansible〕miitoolvens32ens32:negotiated1000baseTFDflowcontrol,linkokproductinfo:Yukon88E1011rev3basicmode:autonegotiationenabledbasicstatus:autonegotiationcomplete,linkokcapabilities:1000baseTFD100baseTxFD100baseTxHD10baseTFD10baseTHDadvertising:1000baseTFD100baseTxFD100baseTxHD10baseTFD10baseTHDlinkpartner:1000baseTHD1000baseTFD100baseTxFD100baseTxHD10baseTFD10baseTHD
  mitool提供了关于如何配置以太网设备物理层的底层信息。ethtool
  在配置和显示以太网设备统计数据方面,ethtool提供了与miitool相似的功能。不过,ethtool更加强大,包含了更多配置选项和设备统计信息。〔rootvms81。liruilongs。github。io〕〔ansible〕ethtoolens32Settingsforens32:Supportedports:〔TP〕Supportedlinkmodes:10baseTHalf10baseTFull100baseTHalf100baseTFull1000baseTFullSupportedpauseframeuse:NoSupportsautonegotiation:YesAdvertisedlinkmodes:10baseTHalf10baseTFull100baseTHalf100baseTFull1000baseTFullAdvertisedpauseframeuse:NoAdvertisedautonegotiation:YesSpeed:1000MbsDuplex:FullPort:TwistedPairPHYAD:0Transceiver:internalAutonegotiation:onMDIX:off(auto)SupportsWakeon:dWakeon:dCurrentmessagelevel:0x00000007(7)drvprobelinkLinkdetected:yes
  通过上面的配置我们可以看大,带宽为Speed:1000Mbs千兆,双工模式为Duplex:Full全双工,网卡是否连接网线:Linkdetected:yesifconfig(接口配置)
  ifconfig的主要工作就是在Linux机器上安装和配置网络接口。它还提供了系统中所有网络设备的基本性能统计信息。ifconfig几乎在所有联网的Linux机器上都是可用的。〔rootvms81。liruilongs。github。io〕〔ansible〕ifconfigens32ens32:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1500inet192。168。26。81netmask255。255。255。0broadcast192。168。26。255inet6fe80::20c:29ff:fead:e393prefixlen64scopeid0x20linkether00:0c:29:ad:e3:93txqueuelen1000(Ethernet)RXpackets507331bytes69923393(66。6MiB)RXerrors0dropped0overruns0frame0TXpackets556567bytes308574743(294。2MiB)TXerrors0dropped0overruns0carrier0collisions0
  关于部分参数的说明
  列说明RXpackets设备已接收的数据包数TXpackets设备已发送的数据包数errors发送或接收时的错误数dropped发送或接收时丢弃的数据包数overruns网络设备没有足够的缓冲区来发送或接收一个数据包的次数frame底层以太网帧错误的数量carrier由于链路介质故障(如故障电缆)而丢弃的数据包数量
  ifconfig提供的统计数据显示的是自系统启动开始的累计数值。如果你将一个网络设备下线,之后又让其上线,其统计数据也不会重置。如果你按规律的间隔来运行ifconfig,就可以发现各种统计数据的变化率。这一点可以通过watch命令或shell脚本来自动实现,〔rootvms81。liruilongs。github。io〕〔〕watchdn1ifconfigens32
  ip
  一些网络工具,如ifconfig,正在被淘汰,取而代之的是新的命令:ip,ip不仅可以让你对Linux联网的多个不同方面进行配置,还可以显示每个网络设备的性能统计信息。〔rootvms81。liruilongs。github。io〕〔〕ipsslinklsens322:ens32:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscpfifofaststateUPmodeDEFAULTqlen1000linkether00:0c:29:ad:e3:93brdff:ff:ff:ff:ff:ffRX:bytespacketserrorsdroppedoverrunmcast1279774577561380000RXerrors:lengthcrcframefifomissed00000TX:bytespacketserrorsdroppedcarriercollsns4382598668142260000TXerrors:abortedfifowindowheartbeattransns00008〔rootvms81。liruilongs。github。io〕〔〕
  部分字段说明,RX代表接收,TX代表发送。
  列说明bytes发送或接收的字节数packets发送或接收的数据包数errors发送或接收时发生的错误数dropped由于网卡缺少资源,导致未发送或接收的数据包数overruns网络没有足够的缓冲区空间来发送或接收更多数据包的次数mcast已接收的多播数据包的数量carrier由于链路介质故障(如故障电缆)而丢弃的数据包数量collsns传送时设备发生的冲突次数。当多个设备试图同时使用网络时就会发生冲突sar
  sar提供了链路级的网络性能数据。但是,它同时还提供了一些关于传输层打开的套接字数量的基本信息。sar使用如下命令行来收集网络统计信息:sar〔nDEVEDEVSOCKFULL〕〔DEVICE〕〔linterval〕〔count〕
  选项说明nDEV显示每个设备发送和接收的数据包数和字节数信息nEDEV显示每个设备的发送和接收错误信息nSoCK显示使用套接字(TCP、UDP和RAW)的总数信息nFULL显示所有的网络统计信息interval采样间隔时长count采样总数
  显示每个设备发送和接收的数据包数和字节数信息〔rootvms81。liruilongs。github。io〕〔ansible〕sarnDEV11Linux3。10。0693。el7。x8664(vms81。liruilongs。github。io)2022年05月14日x8664(2CPU)22时46分16秒IFACErxpckstxpcksrxkBstxkBsrxcmpstxcmpsrxmcsts22时46分17秒ens321。001。000。110。090。000。000。0022时46分17秒cali86e7ca9e9c20。000。000。000。000。000。000。0022时46分17秒cali13a4549bf1e0。000。000。000。000。000。000。0022时46分17秒cali5a282a7bbb00。000。000。000。000。000。000。0022时46分17秒cali12cf25006b50。000。000。000。000。000。000。0022时46分17秒cali45e02b0b21e0。000。000。000。000。000。000。0022时46分17秒lo224。00224。0027。5727。570。000。000。0022时46分17秒calicb34164ec790。000。000。000。000。000。000。0022时46分17秒tunl00。000。000。000。000。000。000。0022时46分17秒docker00。000。000。000。000。000。000。00平均时间:IFACErxpckstxpcksrxkBstxkBsrxcmpstxcmpsrxmcsts平均时间:ens321。001。000。110。090。000。000。00平均时间:cali86e7ca9e9c20。000。000。000。000。000。000。00平均时间:cali13a4549bf1e0。000。000。000。000。000。000。00平均时间:cali5a282a7bbb00。000。000。000。000。000。000。00平均时间:cali12cf25006b50。000。000。000。000。000。000。00平均时间:cali45e02b0b21e0。000。000。000。000。000。000。00平均时间:lo224。00224。0027。5727。570。000。000。00平均时间:calicb34164ec790。000。000。000。000。000。000。00平均时间:tunl00。000。000。000。000。000。000。00平均时间:docker00。000。000。000。000。000。000。00〔rootvms81。liruilongs。github。io〕〔ansible〕
  列说明rxpcks数据包接收速率txpcks数据包发送速率rxkBskb接收速率txkBskb发送速率rxcmps压缩包接收速率txcmps压缩包发送速率rxmcsts多播包接收速率
  显示每个设备的发送和接收错误信息〔rootvms81。liruilongs。github。io〕〔ansible〕sarnEDEV11Linux3。10。0693。el7。x8664(vms81。liruilongs。github。io)2022年05月14日x8664(2CPU)22时53分07秒IFACErxerrstxerrscollsrxdropstxdropstxcarrsrxframsrxfifostxfifos22时53分08秒ens320。000。000。000。000。000。000。000。000。0022时53分08秒cali86e7ca9e9c20。000。000。000。000。000。000。000。000。0022时53分08秒cali13a4549bf1e0。000。000。000。000。000。000。000。000。0022时53分08秒cali5a282a7bbb00。000。000。000。000。000。000。000。000。0022时53分08秒cali12cf25006b50。000。000。000。000。000。000。000。000。0022时53分08秒cali45e02b0b21e0。000。000。000。000。000。000。000。000。0022时53分08秒lo0。000。000。000。000。000。000。000。000。0022时53分08秒calicb34164ec790。000。000。000。000。000。000。000。000。0022时53分08秒tunl00。000。000。000。000。000。000。000。000。0022时53分08秒docker00。000。000。000。000。000。000。000。000。00平均时间:IFACErxerrstxerrscollsrxdropstxdropstxcarrsrxframsrxfifostxfifos平均时间:ens320。000。000。000。000。000。000。000。000。00平均时间:cali86e7ca9e9c20。000。000。000。000。000。000。000。000。00平均时间:cali13a4549bf1e0。000。000。000。000。000。000。000。000。00平均时间:cali5a282a7bbb00。000。000。000。000。000。000。000。000。00平均时间:cali12cf25006b50。000。000。000。000。000。000。000。000。00平均时间:cali45e02b0b21e0。000。000。000。000。000。000。000。000。00平均时间:lo0。000。000。000。000。000。000。000。000。00平均时间:calicb34164ec790。000。000。000。000。000。000。000。000。00平均时间:tunl00。000。000。000。000。000。000。000。000。00平均时间:docker00。000。000。000。000。000。000。000。000。00〔rootvms81。liruilongs。github。io〕〔ansible〕
  列说明rxerrs接收错误率txerrs发送错误率co11s发送时的以太网冲突率rxdrops由于Linux内核缓冲区不足而导致的接收帧丢弃率txdrops由于Linux内核缓冲区不足而导致的发送帧丢弃率txcarrs由于载波错误而导致的发送帧丢弃率rxframs由于帧对齐错误而导致的接收帧丢弃率rxfifos由于FIFO错误而导致的接收帧丢弃率txfifos由于FIFO错误而导致的发送帧丢弃率
  显示使用套接字(TCP、UDP和RAW)的总数信息〔rootvms81。liruilongs。github。io〕〔ansible〕sarnSOCK13Linux3。10。0693。el7。x8664(vms81。liruilongs。github。io)2022年05月14日x8664(2CPU)22时56分23秒totscktcpsckudpsckrawsckipfragtcptw22时56分24秒348724590016322时56分25秒348724590016522时56分26秒3487245900167平均时间:3487245900165〔rootvms81。liruilongs。github。io〕〔ansible〕
  列说明totsck当前正在被使用的套接字总数tcpsck当前正在被使用的TCP套接字总数udpsck当前正在被使用的UDP套接字总数rawsck当前正在被使用的RAW套接字总数ipfragIP分片的总数iptraf
  iptraf是一个实时网络监控工具。它提供了相当多的模式来监控网络接口和流量。iptraf是一种控制台应用程序,但其用户界面则是基于光标的一组菜单和窗口。
  iptraf可以提供有关每个网络设备发送帧速率的信息。同时,它还能够显示TCPIP数据包的类型和大小信息,以及。
  需要装包〔rootvms81。liruilongs。github。io〕〔ansible〕yumyinstalliptraf。。。。。。。。。。。。。。。。Runningtransaction正在安装:iptrafng1。1。47。el7。x866411验证中:iptrafng1。1。47。el7。x866411已安装:iptrafng。x86640:1。1。47。el7完毕!
  iptraf用如下命令行调用:
  iptraf〔dinterface〕〔sinterface〕〔t〕
  如果调用iptraf时不带参数,就会显示一个菜单,让你选择监控界面以及想要监控的信息类型。这些选项用于观察特定接口或网络服务上的网络流量。〔rootvms81。liruilongs。github。io〕〔ansible〕iptrafng
  观察所有接口的网络流量信息
  选项说明dinterface接口的详细统计信息,包括:接收信息、发送信息以及错误率信息sinterface关于接口上哪些IP端口正在被使用,以及有多少字节流经它们的统计信息tiptraf退出前运行的分钟数〔rootvms81。liruilongs。github。io〕〔ansible〕iptrafngdens32t1
  这条命令指定iptraf显示以太网设备ets32的详细信息并在运行1分钟后退出。我们可以看到,当前网络设备接收速率为6。13kbps,发送速率为42。81kbps
  iptraf显示每个UDP和TCP端口上的网络流量信息。通过端口我们可以看到每个端口对应的服务处理了多少流量,下图我们可以看到,有278kb的流量被22端口接收,有362kb的ssh数据从当前网卡发送出去〔rootvms81。liruilongs。github。io〕〔ansible〕iptrafngsens32t10
  netstat
  netstat是一种基本的网络性能工具,它几乎出现在每一个联网的Linux机器上(当然我们也可以使用ss命令),可以用它抽取的信息包括:当前正在使用的网络套接字的数量和类型,有关流入和流出当前系统的UDP和TCP数据包数量的特定接口统计数据。能将一个套接字回溯到其特定进程或PID,这在试图确定哪个应用程序要对网络流量负责时是很有用的。
  netstat〔p〕〔c〕〔interfacescname〕〔s〕〔t〕〔u〕Iw〕
  如果netstat调用时不带任何参数,它将显示系统范围内的套接字使用情况以及Internet域和UNIX域套接字的信息。(UNIX域套接字用于本机的进程通信。)为了能检索所有其可以显示的统计信息,需要从根目录运行netstat。〔rootvms81。liruilongs。github。io〕〔ansible〕netstatsedn20,30ptcp00localhost:2379localhost:51396ESTABLISHEDtcp00localhost:2379localhost:33432ESTABLISHEDtcp00localhost:2379localhost:33392ESTABLISHEDtcp00localhost:35008localhost:9099TIMEWAITtcp00localhost:51154localhost:2379ESTABLISHEDtcp00localhost:51390localhost:2379ESTABLISHEDtcp00vms81。liruilongs。:5398210。96。0。1:httpsESTABLISHEDtcp00localhost:51266localhost:2379ESTABLISHEDtcp00localhost:51482localhost:2379ESTABLISHEDtcp00localhost:2379localhost:52920ESTABLISHEDtcp00localhost:2379localhost:tracerouteESTABLISHED
  选项说明p给出打开每个被显示套接字的PID程序名c每秒持续更新显示信息interfaces显示指定接口的网络统计信息statisticssIPUDPICMPTCP统计信息tcpt仅显示TCP套接字相关信息udpu仅显示UDP套接字相关信息raww仅显示RAW套接字相关信息(IP和ICMP)〔rootvms81。liruilongs。github。io〕〔ansible〕netstatpsedn20,30ptcp00localhost:2379localhost:51396ESTABLISHED2025etcdtcp00localhost:2379localhost:33432ESTABLISHED2025etcdtcp00localhost:2379localhost:33392ESTABLISHED2025etcdtcp00localhost:35008localhost:9099TIMEWAITtcp00localhost:51154localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:51390localhost:2379ESTABLISHED14196kubeapiservetcp00vms81。liruilongs。:5398210。96。0。1:httpsESTABLISHED108260caliconodetcp00localhost:51266localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:51482localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:2379localhost:52920ESTABLISHED2025etcdtcp00localhost:2379localhost:tracerouteESTABLISHED2025etcd
  然后我们看一个日常的运维脚本functionnetwork(){获取网卡流量信息,接收发送的数据流量,单位为字节(bytes)netmonitor(catprocnetdevtailn3awkBEGIN{print网卡名称入站数据流量(bytes)出站数据流量(bytes)}{print1,2,10}columnt)获取暴露端口信息ipport(ssntulpa)本地IP地址列表localip(ipasawkinet{print2})echoe33〔32m网络相关33〔0mechoe本地IP地址列表:echoe33〔31mlocalip33〔0mechoe33〔32m33〔0mechoe获取网卡流量信息:echoe33〔31mnetmonitor33〔0mechoe33〔32m33〔0mechoe获取暴露端口信息:echoe33〔31mipport33〔0mechoe33〔32m33〔0m}
  输出截图优化网络IO使用情况
  当知道网络发生了问题时,Linux提供了一组工具来确定哪些应用程序涉及其中。但是,在与外部机器连接时,对网络问题的修复就不完全由你控制了。
  网络设备发送接收量接近理论极限了吗?
  要做的第一件事就是用ethtool来确定每个Ethernet设备设置的硬件速度是多少。通过下面的配置文件我们可以看到,设置当前网卡带宽为1000Mbs〔rootvms81。liruilongs。github。io〕〔ansible〕ethtoolens32Settingsforens32:Supportedports:〔TP〕Supportedlinkmodes:10baseTHalf10baseTFull100baseTHalf100baseTFull1000baseTFullSupportedpauseframeuse:NoSupportsautonegotiation:YesAdvertisedlinkmodes:10baseTHalf10baseTFull100baseTHalf100baseTFull1000baseTFullAdvertisedpauseframeuse:NoAdvertisedautonegotiation:YesSpeed:1000MbsDuplex:FullPort:TwistedPairPHYAD:0Transceiver:internalAutonegotiation:onMDIX:off(auto)SupportsWakeon:dWakeon:dCurrentmessagelevel:0x00000007(7)drvprobelinkLinkdetected:yes
  如果有这些信息的记录,就可以调查是否有网络设备处于饱和状态。Ethernet设备和或交换机容易被误配置,ethtool显示每个设备认为其应运行的速度。在确定了每个Ethernet设备的理论极限后,使用iptraf(甚至是ifconfig)来明确流经每个接口的流量。〔rootvms81。liruilongs。github。io〕〔ansible〕ifconfigens32ens32:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1500inet192。168。26。81netmask255。255。255。0broadcast192。168。26。255inet6fe80::20c:29ff:fead:e393prefixlen64scopeid0x20linkether00:0c:29:ad:e3:93txqueuelen1000(Ethernet)RXpackets628172bytes109448643(104。3MiB)RXerrors0dropped0overruns0frame0TXpackets674109bytes362438519(345。6MiB)TXerrors0dropped0overruns0carrier0collisions0
  如果有任何网络设备表现出饱和,转到下面两个节点。我们可以看到当前网卡接收的数据量为104M,发送的数据量为345M。这里我们可以通过watch监听的方式看计算每秒的流量数据。
  也可以使用iptraf来实现,下面的命令统计流量的进出速率〔rootvms81。liruilongs。github。io〕〔ansible〕iptrafngdens32t1
  网络设备产生了大量错误吗?
  网络流量减缓的原因也可能是大量的网络错误。用ifconfig来确定是否有接口产生了大量的错误。大量错误可能是不匹配的Ethernet卡Ethernet交换机设置的结果。〔rootvms81。liruilongs。github。io〕〔ansible〕ifconfigens32greperrRXerrors0dropped0overruns0frame0TXerrors0dropped0overruns0carrier0collisions0〔rootvms81。liruilongs。github。io〕〔ansible〕设备上流量的类型是什么?
  如果特定设备正在服务大量的数据,使用iptraf可以跟踪该设备发送和接收的流量类型。当知道了设备处理的流量类型后,转到下面的节点〔rootvms81。liruilongs。github。io〕〔ansible〕iptrafngsens32t10
  特定进程要为流量负责吗?
  接下来,我们想要确定是否有特定进程要为这个流量负责。使用netstat的p选项来查看是否有进程在处理流经网络端口的类型流量。〔rootvms81。liruilongs。github。io〕〔ansible〕netstatpgrep2379tcp00localhost:33354localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:33416localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:51498localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:53062localhost:2379ESTABLISHED14196kubeapiservetcp00localhost:2379localhost:52520ESTABLISHED2025etcd
  如果有应用程序要对此负责,转到〔流量是哪个远程系统发送的〕节点。如果没有这样的程序,则转到〔哪个应用程序套接字要为流量负责〕。流量是哪个远程系统发送的?
  如果没有应用程序应对这个流量负责,那么就可能是网络上的某些系统用无用的流量攻击了你的系统。要确定是哪些系统发送了这些流量,要使用iptraf或etherape。
  如果可能的话,请与系统所有者联系,并尝试找出发生这种情况的原因。如果所有者无法联系上,可以在Linux内核中设置ipfilters,永久丢弃这个特定的流量,或者是在远程机与本地机之间建立防火墙来拦截该流量。哪个应用程序套接字要为流量负责?
  确定使用了哪个套接字要分两步。这部分完全看不懂,先记录下,第一步,用straceetracefile跟踪应用程序所有的I0系统调用。这能显示进程是从哪些文件描述符进行读写的。〔rootvms81。liruilongs。github。io〕〔ansible〕yumyinstallstrace
  跟踪执行kubectlgetnodes涉及到的文件读写〔rootvms81。liruilongs。github。io〕〔ansible〕kubectlgetnodesNAMESTATUSROLESAGEVERSIONvms81。liruilongs。github。ioReadycontrolplane,master153dv1。22。2vms82。liruilongs。github。ioReadynone153dv1。22。2vms83。liruilongs。github。ioNotReadynone153dv1。22。2〔rootvms81。liruilongs。github。io〕〔ansible〕straceetracefilekubectlgetnodesexecve(usrbinkubectl,〔kubectl,get,nodes〕,0x7ffc888b4e4022vars)0openat(ATFDCWD,syskernelmmtransparenthugepagehpagepmdsize,ORDONLY)1ENOENT(没有那个文件或目录)readlinkat(ATFDCWD,procselfexe,usrbinkubectl,128)16openat(ATFDCWD,usrbinkubectl,ORDONLYOCLOEXEC)6SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}SIGURG{sisignoSIGURG,sicodeSITKILL,sipid22013,siuid0}openat(ATFDCWD,root。kubecachediscovery192。168。26。816443policyv1beta1serverresources。json,ORDONLYOCLOEXEC)6。。。。。。。。。。第二步,通过查看proc文件系统,将这些文件描述符映射回套接字。procfd中的文件是从文件描述符到实际文件或套接字的符号链接。该目录下的1s1a会显示特定进程全部的文件描述符。名字中带有socket的是网络套接字。之后就可以利用这些信息来确定程序中的哪个套接字产生了这些通信。〔rootvms81。liruilongs。github。io〕〔ansible〕pselFgrepetcd4Sroot2025200428002803899futex9665615月14?00:33:14etcdadvertiseclienturlshttps:192。168。26。81:2379certfileetckubernetespkietcdserver。crtclientcertauthtruedatadirvarlibetcdinitialadvertisepeerurlshttps:192。168。26。81:2380initialclustervms81。liruilongs。github。iohttps:192。168。26。81:2380keyfileetckubernetespkietcdserver。keylistenclienturlshttps:127。0。0。1:2379,https:192。168。26。81:2379listenmetricsurlshttp:127。0。0。1:2381listenpeerurlshttps:192。168。26。81:2380namevms81。liruilongs。github。iopeercertfileetckubernetespkietcdpeer。crtpeerclientcertauthtruepeerkeyfileetckubernetespkietcdpeer。keypeertrustedcafileetckubernetespkietcdca。crtsnapshotcount10000trustedcafileetckubernetespkietcdca。crt4Sroot141961402010800311578futex44504405月14?01:54:30kubeapiserveradvertiseaddress192。168。26。81allowprivilegedtruetokenauthfileetckubernetespkiliruilong。csvauthorizationmodeNode,RBACclientcafileetckubernetespkica。crtenableadmissionpluginsNodeRestrictionenablebootstraptokenauthtrueetcdcafileetckubernetespkietcdca。crtetcdcertfileetckubernetespkiapiserveretcdclient。crtetcdkeyfileetckubernetespkiapiserveretcdclient。keyetcdservershttps:127。0。0。1:2379kubeletclientcertificateetckubernetespkiapiserverkubeletclient。crtkubeletclientkeyetckubernetespkiapiserverkubeletclient。keykubeletpreferredaddresstypesInternalIP,ExternalIP,Hostnameproxyclientcertfileetckubernetespkifrontproxyclient。crtproxyclientkeyfileetckubernetespkifrontproxyclient。keyrequestheaderallowednamesfrontproxyclientrequestheaderclientcafileetckubernetespkifrontproxyca。crtrequestheaderextraheadersprefixXRemoteExtrarequestheadergroupheadersXRemoteGrouprequestheaderusernameheadersXRemoteUsersecureport6443serviceaccountissuerhttps:kubernetes。default。svc。cluster。localserviceaccountkeyfileetckubernetespkisa。pubserviceaccountsigningkeyfileetckubernetespkisa。keyserviceclusteriprange10。96。0。012tlscertfileetckubernetespkiapiserver。crttlsprivatekeyfileetckubernetespkiapiserver。key0Sroot2473524319080028170pipew980002:08pts100:00:00grepcolorautoetcd〔rootvms81。liruilongs。github。io〕〔ansible〕〔rootvms81。liruilongs。github。io〕〔ansible〕cdproc2025fd〔rootvms81。liruilongs。github。io〕〔proc2025fd〕ls0102109116121126131136182227313640455545964717883995110311117122127132141923283237414650556657379849097。。。。。。。最后的手段
  当你看到这里的时候,你的问题可能得到也可能没有得到解决,但是,你会获取大量描述它的信息。在搜索引擎上看看他们是如何解决问题的。尝试一个解决方案,并观察系统或应用程序的行为是否发生了变化。每次尝试新方案时,请转到流程最开始重新开始系统诊断,因为,每一个修复都可能会让应用程序的行为发生变化。
  如果涉及到网络配置,也可用个通过NetworkManager服务来配置网络相关的管理,网卡方面,可以通过nmclidevstatus命令用来查看所有网络设备的当前状态。这部分感兴趣小伙伴可以看看我之前的博文〔rootliruilongs。github。io〕〔〕nmclidevstatusDEVICETYPESTATECONNECTIONprivbr0bridgeconnectedprivbr0virbr0bridgeconnectedvirbr0eth0ethernetconnectedeth0vnet0tunconnectedvnet0vnet1tunconnectedvnet1loloopbackunmanagedvirbr0nictununmanaged
  通过show命令nmclideviceshoweth0可以查看网卡详细信息〔rootservera。lab。example。com〕〔〕nmclideviceshoweth0GENERAL。DEVICE:eth0GENERAL。TYPE:ethernetGENERAL。HWADDR:52:54:00:00:FA:0AGENERAL。MTU:1500GENERAL。STATE:100(connected)GENERAL。CONNECTION:Wiredconnection1GENERAL。CONPATH:orgfreedesktopNetworkManagerActiveConnection1WIREDPROPERTIES。CARRIER:onIP4。ADDRESS〔1〕:172。25。250。1024IP4。GATEWAY:172。25。250。254IP4。ROUTE〔1〕:dst172。25。250。024,nh0。0。0。0,mt100IP4。ROUTE〔2〕:dst0。0。0。00,nh172。25。250。254,mt100IP4。DNS〔1〕:172。25。250。254IP6。ADDRESS〔1〕:fe80::984:87d2:dba7:100764IP6。GATEWAY:IP6。ROUTE〔1〕:dstfe80::64,nh::,mt100IP6。ROUTE〔2〕:dstff00::8,nh::,mt256,table255〔rootservera。lab。example。com〕〔〕
  相关的命令〔rootservera。lab。example。com〕〔〕nmclideviceconnectdisconnectlldpmonitorsetstatusdeletehelpmodifyreapplyshowwifi
  man帮助文档DEVICEMANAGEMENTCOMMANDSnmclidevice{statusshowsetconnectreapplymodifydisconnectdeletemonitorwifilldp}〔ARGUMENTS。。。〕Showandmanagenetworkinterfaces。statusPrintstatusofdevices。Thisisthedefaultactionifnocommandisspecifiedtonmclidevice。show〔ifname〕Showdetailedinformationaboutdevices。Withoutanargument,alldevicesareexamined。Togetinformationforaspecificdevice,theinterfacenamehastobeprovided。set〔ifname〕ifname〔autoconnect{yesno}〕〔managed{yesno}〕Setdeviceproperties。connectifnameConnectthedevice。NetworkManagerwilltrytofindasuitableconnectionthatwillbeactivated。Itwillalsoconsiderconnectionsthatarenotsettoautoconnect。Ifnocompatibleconnectionexists,anewprofilewithdefaultsettingswillbecreatedandactivated。ThisdifferentiatesnmcliconnectionupifnameDEVICEfromnmclideviceconnectDEVICEIfwaitoptionisnotspecified,thedefaulttimeoutwillbe90seconds。reapplyifnameAttempttoupdatedevicewithchangestothecurrentlyactiveconnectionmadesinceitwaslastapplied。modifyifname{optionvalue〔〕setting。propertyvalue}。。。Modifythesettingscurrentlyactiveonthedevice。Thiscommandletsyoudotemporarychangestoaconfigurationactiveonaparticulardevice。Thechangesarenotpreservedintheconnectionprofile。Seenmsettings(5)forthelistofavailableproperties。Pleasenotethatsomepropertiescantbechangedonanalreadyconnecteddevice。YoucanalsousethealiasesdescribedinPROPERTYALIASESsection。Thesyntaxisthesameasofthenmcliconnectionmodifycommand。disconnectifname。。。Disconnectadeviceandpreventthedevicefromautomaticallyactivatingfurtherconnectionswithoutusermanualintervention。Notethatdisconnectingsoftwaredevicesmaymeanthatthedeviceswilldisappear。Ifwaitoptionisnotspecified,thedefaulttimeoutwillbe10seconds。deleteifname。。。Deleteadevice。Thecommandremovestheinterfacefromthesystem。Notethatthisonlyworksforsoftwaredeviceslikebonds,bridges,teams,etc。Hardwaredevices(likeEthernet)cannotbe
投诉 评论 转载

51岁李英爱绝美冻龄!大长今嫁入豪门13年,11岁龙凤胎颜值在釜山电影节闭幕红毯上,李英爱的状态令人叫绝。她穿了一条颇有设计感的黑色连衣裙,发型简洁,把大家给惊艳了。要知道,李英爱已经51岁,但她的脸看起来说是30岁也有人信……苹果将发布iPadPro11和12。9英寸两款搭载M2芯片产业链传出消息称,苹果将在本周发布全新的iPadPro,和上一代的尺寸定位相同,会分位11英寸和12。9英寸两款。而令人遗憾的是,12。9英寸版本采用miniLED屏幕,……微软的新工具使用AI生成您想象的任何图像微软周三宣布了面向Microsoft365、MicrosoftEdge和Bing用户的新创意和生产力工具。最重要的是微软设计师。这款来自Microsoft365的图形设计……露营需要注意啥?玩耍攻略收好之后再出发身未动,心已远。打算十一假期去户外露营的小伙伴,请带好这篇攻略,特别是第一次去户外野营的新手,装备一定要准备齐全,而且要知道沈阳周边露营地的情况,才能拥有一次完美的假期露营之旅……惊悚!美国花样游泳运动员比赛中,突然往池底坠落,瞬间不省人事你可能没想过,专业的游泳运动员,也会溺水?!昨天,美国花样游泳运动员比赛中,突然往池底坠落,瞬间不省人事。。。。。。01hr超高技能花游运动员突然溺水周……超级富婆杨天真,满地爱马仕当垃圾乱踩?被誉为娱乐圈第一经纪人作为奢侈品中贵族的爱马仕,在她眼里却稀疏平常。你见过这样的场面吗?家中爱马仕堆满地,随意乱踩也不心疼,豪宅中的大牌高跟鞋更是放满了一面墙,随便一副耳饰就要上百万,这不是偶……新品不断还不缺钱,苹果股价创新高,全球首现3万亿美元巨无霸当今社会,提及科技公司,永远绕不开苹果。自1976年乔布斯创立苹果,这家传奇的科技公司已经成长了四十多年。当初苹果在纳斯达克敲钟的时候,是以22美元开盘的,时至今日,苹果……中国女首富换人!年入7800亿,超华为成最大民企,她哪来这么铁打的富豪榜,流水的女首富。2022年8月30日,福布斯发布了实时富豪榜,中国女首富换人了!如今的女首富,叫范红卫。她以1041亿元的身价,打败碧桂园老板杨惠……CBA重罚辽篮令人费解,球迷如果郭艾伦属实有病,必须撤销处罚北京时间10月18日,在辽宁男篮与广州男篮比赛前,辽宁男篮12人大名单中,就没有郭艾伦和俞泽辰,让人大吃一惊。随后,CBA发布处罚公告,对辽宁男篮进行处罚,处罚严厉程度,前所未……山东沂南漫山红叶醉游人深秋时节,山东省临沂市沂南县龙宿山上漫山遍野的红叶灿若云霞,美不胜收,令游客流连忘返。10月24日,游客在山东省临沂市沂南县龙宿山上赏叶游玩。(杜昱葆摄)10月24……关于Linux性能调优中网络IO的一些笔记写在前面和小伙伴分享一些Linux网络优化的笔记,内容很浅,可以用作入门博文内容结合《Linux性能优化》读书笔记整理涉及内容包括常用的优化工具(miitool,ethtool……12点30分李梦高烧!2大团队严肃发声,即将由勒布朗蜕变成乔北京时间9月30日,在中国女篮对阵澳大利亚的比赛开始之前,最后的5个小时突然传来了噩耗,根据中国篮球之队带来的前线最新爆料,李梦突发高烧,半决赛她只能有保留的出战。而这个……
三头牛和狮子直通车关键词不同类目怎么选如何区分秋田犬和柴犬秋田犬和柴犬的辨别方法逆水寒铁牢副本15通关攻略做自己的英雄打造帅气的秋冬造型,帅气逼人的西服领皮风衣山东酒与江苏酒最大的区别是什么国安幸亏没留下他,如今在中超保级队都踢不上球,曾被寄予厚望今秋火了一种穿法叫卫衣无痕裤,遮肉又显瘦,回头率超高现实生活感悟说说短句生活感悟简短语句大全产后如何减肥当青春与迷彩相遇

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找