服务器怎么查看网口网速?服务器网卡流量监控命令详解

在服务器上查看网口网速,最直接的方法是使用系统自带的实时监控命令,比如Linux下的nload、iftop、sar,配合ethtool查看物理链路速率,再结合/proc/net/dev读取累计流量,就能准确掌握当前带宽占用和网口状态。

很多运维朋友拿到服务器第一件事就是装监控面板,其实系统自带工具已经足够用,网口网速这个概念分两层:一是物理网卡协商速率,比如千兆还是万兆;二是实际吞吐量,也就是跑业务时真正用到的带宽,排查故障、评估扩容、判断是否被攻击,都得先搞清这两个数字。

先从物理层看起:确认网卡协商速率和链路状态

物理链路没起来,后面全白搭,登录服务器后,先用ethtool确认网卡当前协商的速率、双工模式和链路是否正常。

ethtool命令查看网卡基础信息

执行ethtool eth0,输出里的Speed就是当前协商速率,常见有1000Mb/s、10000Mb/s。Duplex显示Full代表全双工,Link detected: yes表示物理链路正常,如果Speed远低于预期,比如万兆网卡协商成千兆,大概率是网线、交换机端口或光模块问题。

查看所有网卡的简要状态可以用ethtool -S eth0,这里能看到rx_bytes、tx_bytes等详细计数器,但直观性不如ip命令。

用ip命令快速查看网卡状态

ip link show列出所有网卡,state UP代表启用,state DOWN代表禁用。ip -s link show eth0直接显示接收和发送的字节数、数据包数,以及错误和丢弃计数,这个数据来自内核,是累计值,需要两次采样做差才能算速率。

ip -s link show eth0

输出里RX行的bytes和TX行的bytes,分别表示累计接收和发送字节数,间隔几秒再执行一次,用差值除以时间就是平均速率,这种方法在任何发行版都可用,脚本采集也方便。

实时带宽监控:三种工具覆盖所有场景

物理速率只能说明“能跑多快”,实际带宽才是用户感知的核心,以下三种工具各有侧重,建议都装一下。

nload:最直观的实时流量曲线

nload在终端里画出进出的流量图,左侧是Incoming,右侧是Outgoing,单位自动切换Kbps/Mbps/Gbps,它显示的是当前瞬时速率,也提供平均速率和峰值,安装很简单,CentOS用yum install nload,Ubuntu用apt install nload,执行nload eth0即可只看单个网卡,画面里Curr是当前速率,Avg是平均速率,Min/Max记录区间极值,排查带宽跑满问题时,盯着Max看比看Curr更有参考价值。

iftop:按连接排序的带宽占用排行

需要知道“谁在占带宽”时用

服务器怎么查看网口网速?服务器网卡流量监控命令详解

iftop,它按连接列表显示每个远程IP的实时传输速率,按字母排序,按t键可以按流量排序,执行iftop -i eth0 -n -P,-n不做反向域名解析,-P显示端口,这样能看到哪个IP和端口在疯狂通信,列表底部是汇总,表示总计、发送和接收速率,定位到恶意IP或异常连接后,直接配合防火墙封禁。

sar:历史趋势和瓶颈分析

实时抓包视角有限,出问题时往往没盯着终端。sar可以定时采样,事后追溯,多数系统自带,如果没有,安装sysstat包,配置/etc/cron.d/sysstat启动定时采集后,用sar -n DEV 1 3查看每秒采样的网卡速率,间隔1秒采3次,输出里的rxkB/s和txkB/s就是每秒接收和发送的千字节数,查看历史记录用sar -n DEV -f /var/log/sa/sa$(date +%d),能复盘过去某天的带宽走势。

通过/proc/net/dev精确计算速率

上述工具本质都是读取/proc/net/dev,这个虚拟文件保存了所有网卡从开机到当前时刻的字节计数,格式清晰,可以直接解析。

cat /proc/net/dev

第一行是face |bytes packets errs drop等列名,之后每行一个网卡。eth0行里第1个数字是接收字节,tx对应的第9个数字是发送字节,写个脚本循环采样,差值除以间隔就得到每秒速率,比如用awk提取字段,两次sleep 5相减,得到的就是最近5秒的平均速率。

这种方式对监控系统最友好,纳管平台、自定义告警脚本都基于此实现,它的优势在于不依赖额外软件,任何Linux环境通用,且能精确到字节级别。

Windows Server怎么查:任务管理器不够用,直接用PowerShell

Windows同样面临带宽排查需求,但它没有iftop这样的原生命令,任务管理器的“性能”标签里能看到当前网络使用率,但只有百分比,看不到具体IP和连接,需要借助Counter和PowerShell脚本。

Get-NetAdapter查看网卡状态

PowerShell执行Get-NetAdapter,输出里Status显示Up或Down,LinkSpeed直接显示协商速率,比如1 Gbps或100 Mbps,一目了然,这是最快速的物理链路检查方式。

Get-NetAdapterStatistics统计累计流量

Get-NetAdapterStatistics -Name "以太网"输出ReceivedBytes和SentBytes,同样是累计值,需要两次采样差分,PowerShell的Get-Counter性能计数器也能拿每秒速率:

Get-Counter '\Network Interface(*)\Bytes Total/sec'

这个计数器实时返回当前每秒字节数,除以1024后就是KB/s,不过Windows自带的计数器对历史数据支持较弱,有长期监控需求时,建议直接接入Zabbix或Prometheus。

百兆、千兆、万兆网卡速率不同带来的排查差异

网卡是百兆还是千兆,直接影响网速判断。

服务器怎么查看网口网速?服务器网卡流量监控命令详解

ethtool eth0看到Speed: 100Mb/s,那再怎么优化也不可能突破百兆,此时先查网线是否为超五类以上,交换机端口是否限制百兆,光模块衰减是否严重,多数情况下,物理链路协商异常是速度上不去的首要原因,而不是路由器或防火墙策略。

至于万兆网卡,还要关注ethtool -l eth0的队列数,多队列能让并发流量分散到多个CPU核心,如果没有开启combined相关参数,单队列在万兆环境下容易跑满单核,导致带宽打不满,调整方法是用ethtool -L eth0 combined 4,把队列数设为4或更高。

云服务器场景下的网速查询差异

云服务器和物理机不一样,网卡往往虚拟化。ethtool eth0显示的Speed可能是虚拟交换机模拟出来的,并不代表真实云带宽上限,比如在酷番云这类持牌云服务商的云主机上,Speed: 10000Mb/s可能仅仅表示虚拟网卡支持万兆,但实际带宽按套餐限制在2Mbps或5Mbps,超出就丢包。

云服务器带宽是否跑满,更准确的判断方法是用iperf3和另一台相同网络内的机器互测,比如同地域两台云主机,一端执行iperf3 -s,另一端执行iperf3 -c 对方IP -P 4,测试结果就是当前区域内可达的实际带宽上限,排除公网抖动干扰。

为什么云厂商带宽限制和系统显示不一致

虚拟网卡的计数器统计的是经过虚拟化层的所有流量,而云平台的限速策略通常在底层Hypervisor或物理交换机上执行,看到/proc/net/dev里速率很高,但实际下载速度上不去,大概率就是云带宽限速在起作用,这个问题在物理机自建机房很少遇到,因为物理网卡直接对接交换机,没有限制层。

选择自营机房的独立服务器时,比如简米科技这类有23年行业沉淀的老牌服务商,物理链路速率通常直接对应购买的真实带宽,两者一致性高,技术排查反而简单——ethtool显示千兆,那实际就是千兆,不存在云平台隐藏限速。

排查网速问题必须确认的五个关键点

遇到网速异常,按照以下顺序检查,能覆盖大多数场景:

  • 物理链路协商速率是否匹配预期,用ethtool eth0查看Speed和Link detected。
  • 实时带宽占用是否有异常流量,用iftop -i eth0 -n -P定位大流量IP和端口。
  • CPU软中断是否过高,执行top后按1查看每个核心的si字段,多队列未开启时单核软中断容易达100%。
  • 是否有丢包和错误计数,ip -s link show eth0里errors和dropped数值快速增长说明链路质量差或环形缓冲区不足。
  • 云主机先确认套餐带宽上限,再用iperf3内网互测排除公网干扰。

任何一步发现异常,都能快速缩小问题范围。

推荐工具组合和日常运维习惯

长期维护服务器,建议把工具装齐并形成固定查询路径,一个实际的操作流程是:先用

服务器怎么查看网口网速?服务器网卡流量监控命令详解

ethtool eth0查看协商速率,再用sar -n DEV 1 5查看5秒内的平均速率,遇到异常流量再用iftop定位连接,这套组合覆盖物理层、统计层、连接层三个维度,任何网速问题都能找到蛛丝马迹。

脚本化采集速率也是常见做法,写一个Shell脚本解析/proc/net/dev,每60秒记录一次,配合cron或systemd定时任务存入日志,出问题时翻历史记录比对时间点,效率远高于事后猜。

如果服务器在异地托管或云上,本地登录不方便,可以用图形化工具如ntopng或netdata,它们底层同样读取/proc/net/dev,但提供Web界面和告警功能,这类工具适合多台服务器集中监控的场景。

# 一个简单的速率采样脚本示例
#!/bin/bash
R1=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
T1=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
sleep 5
R2=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
T2=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
echo "接收速率: $(($(($R2-$R1))/5)) bytes/s"
echo "发送速率: $(($(($T2-$T1))/5)) bytes/s"

这个脚本放在任何机器上都能跑,不依赖外部库,适合把速率输出接入本地监控系统,养护服务器不是只看网速,但网速健康是业务稳定的基础,掌握这几个命令,就像给服务器做了个简单的血压计,随时能摸清网络脉搏。

关于服务器网速监控的常见问题和答案

服务器网速显示很高但实际下载很慢,怎么办

先确认物理网卡协商速率是否正常,再检查云主机是否有限速策略,如果是云服务器,套餐带宽上限往往低于网卡协商速率,实际吞吐以iperf3实测为准,对于物理服务器,重点排查网线、交换机和防火墙策略,尝试直接ping网关并记录延迟和丢包率,如果丢包率高,先换线或换端口测试。

如何监控服务器历史网速数据,而不只是实时查看

使用sar配合sysstat的cron定时采集,数据保存在/var/log/sa/目录,可以回溯数月,也可以用vnstat守护进程,它会在后台持续记录每个网卡每天的流量,执行vnstat -d查看日流量,vnstat -m查看月流量,对于需要长期保留场景,把vnstat数据接入图形化面板更直观,选择服务器时,一些专业IDC提供查看历史流量图的功能,比如简米科技自营机房用户会收到独立控制台的流量监控图表,无需自己维护采集程序。

查看网速时发现很多来自同一个IP的连接,是什么原因

用ss -natp查看连接对应的进程PID,再用ps aux | grep PID确认是什么程序,如果是Web服务器,可能是正常的长连接;如果是SSH或数据库端口,从陌生IP发起则可能被扫描或爆破,先确认进程和业务相关性,再用防火墙规则限制该IP连接数,避免影响正常服务。

不喜欢3

网友评论

猜你喜欢