诸如 MRTG 之类的工具为特定接口(例如 eth0)上的当前网络利用率提供网络吞吐量/带宽图。如何在 Linux/UNIX 的命令行中返回该信息?
最好不要安装系统上可用的标准以外的任何东西。
诸如 MRTG 之类的工具为特定接口(例如 eth0)上的当前网络利用率提供网络吞吐量/带宽图。如何在 Linux/UNIX 的命令行中返回该信息?
最好不要安装系统上可用的标准以外的任何东西。
iftop does for network usage what top(1) does for CPU usage
-- http://www.ex-parrot.com/~pdw/iftop/
我不知道 iftop 有多“标准”,但我可以yum install iftop
在 Fedora 上安装它。
有萨尔吗?如果您使用的是 RHEL/CentOS,可能是的。
不需要 priv、dorky 二进制文件、hacky 脚本、libpcap 等。赢。
$ sar -n DEV 1 3
Linux 2.6.18-194.el5 (localhost.localdomain) 10/27/2010
02:40:56 PM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
02:40:57 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:57 PM eth0 10700.00 1705.05 15860765.66 124250.51 0.00 0.00 0.00
02:40:57 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:57 PM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
02:40:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:58 PM eth0 8051.00 1438.00 11849206.00 105356.00 0.00 0.00 0.00
02:40:58 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:58 PM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
02:40:59 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:40:59 PM eth0 6093.00 1135.00 8970988.00 82942.00 0.00 0.00 0.00
02:40:59 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 8273.24 1425.08 12214833.44 104115.72 0.00 0.00 0.00
Average: eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
我很久以前写过这个愚蠢的脚本,它只依赖于 Perl 和 Linux≥2.6:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(strftime);
use Time::HiRes qw(gettimeofday usleep);
my $dev = @ARGV ? shift : 'eth0';
my $dir = "/sys/class/net/$dev/statistics";
my %stats = do {
opendir +(my $dh), $dir;
local @_ = readdir $dh;
closedir $dh;
map +($_, []), grep !/^\.\.?$/, @_;
};
if (-t STDOUT) {
while (1) {
print "\033[H\033[J", run();
my ($time, $us) = gettimeofday();
my ($sec, $min, $hour) = localtime $time;
{
local $| = 1;
printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s',
$dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s)
}
usleep($us ? 1000000 - $us : 1000000);
}
}
else {print run()}
sub run {
map {
chomp (my ($stat) = slurp("$dir/$_"));
my $line = sprintf '%-31.31s:%16.16s', $_, $stat;
$line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0]) / 1)
if @{$stats{$_}} > 0;
$line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4]) / 5)
if @{$stats{$_}} > 4;
$line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14]) / 15)
if @{$stats{$_}} > 14;
$line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59]) / 60)
if @{$stats{$_}} > 59;
unshift @{$stats{$_}}, $stat;
pop @{$stats{$_}} if @{$stats{$_}} > 60;
"$line\n";
} sort keys %stats;
}
sub slurp {
local @ARGV = @_;
local @_ = <>;
@_;
}
它只是每秒读取/sys/class/net/$dev/statistics
一次,并打印出当前数字和平均变化率:
$ ./net_stats.pl eth0
rx_bytes : 74457040115259 4369093 4797875 4206554 364088
rx_packets : 91215713193 23120 23502 23234 17616
...
tx_bytes : 90798990376725 8117924 7047762 7472650 319330
tx_packets : 93139479736 23401 22953 23216 23171
...
eth0 : 15:22:09.002216 1s 5s 15s 60s
^ current reading ^-------- averages ---------^
nload是一个用于实时监控带宽的好工具,并且可以使用 sudo apt-get install nload 轻松安装在 Ubuntu 或 Debian 中。
Device eth0 [10.10.10.5] (1/2):
=====================================================================================
Incoming:
. ...|
# ####|
.. |#| ... #####. .. Curr: 2.07 MBit/s
###.### #### #######|. . ## | Avg: 1.41 MBit/s
########|#########################. ### Min: 1.12 kBit/s
........ ################################### .### Max: 4.49 MBit/s
.##########. |###################################|##### Ttl: 1.94 GByte
Outgoing:
########## ########### ###########################
########## ########### ###########################
##########. ########### .###########################
########### ########### #############################
########### ###########..#############################
############ ##########################################
############ ##########################################
############ ########################################## Curr: 63.88 MBit/s
############ ########################################## Avg: 32.04 MBit/s
############ ########################################## Min: 0.00 Bit/s
############ ########################################## Max: 93.23 MBit/s
############## ########################################## Ttl: 2.49 GByte
另一个出色的工具是iftop,也很容易 apt-get'able:
191Mb 381Mb 572Mb 763Mb 954Mb
└────────────┴──────────┴─────────────────────┴───────────┴──────────────────────
box4.local => box-2.local 91.0Mb 27.0Mb 15.1Mb
<= 1.59Mb 761kb 452kb
box4.local => box.local 560b 26.8kb 27.7kb
<= 880b 31.3kb 32.1kb
box4.local => userify.com 0b 11.4kb 8.01kb
<= 1.17kb 2.39kb 1.75kb
box4.local => b.resolvers.Level3.net 0b 58b 168b
<= 0b 83b 288b
box4.local => stackoverflow.com 0b 42b 21b
<= 0b 42b 21b
box4.local => 224.0.0.251 0b 0b 179b
<= 0b 0b 0b
224.0.0.251 => box-2.local 0b 0b 0b
<= 0b 0b 36b
224.0.0.251 => box.local 0b 0b 0b
<= 0b 0b 35b
─────────────────────────────────────────────────────────────────────────────────
TX: cum: 37.9MB peak: 91.0Mb rates: 91.0Mb 27.1Mb 15.2Mb
RX: 1.19MB 1.89Mb 1.59Mb 795kb 486kb
TOTAL: 39.1MB 92.6Mb 92.6Mb 27.9Mb 15.6Mb
不要忘记旧 *nix 上经典而强大的 sar 和 netstat 实用程序!
您可以解析/proc/net/dev。
dstat
- 结合 vmstat、iostat、ifstat、netstat 信息等iftop
- 惊人的网络带宽实用程序来分析你的 eth 上真正发生的事情netio
- 通过 TCP/IP 测量网络的净吞吐量inq
- 显示存储信息的 CLI 故障排除实用程序,通常是 Symmetrix。默认情况下,INQ 返回设备名称、Symmetrix ID、Symmetrix LUN 和容量。send_arp
- 在指定的网络设备(默认为 eth0)上发送 arp 广播,报告新旧 IP 地址映射到 MAC 地址。EtherApe
- 是仿照 etherman 的 Unix 图形网络监视器。它具有链路层、IP 和 TCP 模式,以图形方式显示网络活动。iptraf
- IP 流量监视器,显示有关通过您的网络的 IP 流量的信息。更多详情: http: //felipeferreira.net/?p=1194
为此,我得到了另一个 quick'n'dirty bash 脚本:
#!/bin/bash
IF=$1
if [ -z "$IF" ]; then
IF=`ls -1 /sys/class/net/ | head -1`
fi
RXPREV=-1
TXPREV=-1
echo "Listening $IF..."
while [ 1 == 1 ] ; do
RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
if [ $RXPREV -ne -1 ] ; then
let BWRX=$RX-$RXPREV
let BWTX=$TX-$TXPREV
echo "Received: $BWRX B/s Sent: $BWTX B/s"
fi
RXPREV=$RX
TXPREV=$TX
sleep 1
done
它正在考虑这sleep 1
实际上会持续一秒钟,这不是真的,但对于粗略的带宽评估来说已经足够了。
感谢@ephemient /sys/class/net/<interface>
!:)
您可以解析的输出ifconfig
除了 iftop 和 iptraf,还要检查:
bwm-ng
(下一代带宽监视器)和/或
cbm
(彩色带宽计)参考:http ://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html
如果您只想获取值,可以使用简单的 shell oneliner,如下所示:
S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS
它将显示 10 秒周期内的平均“每秒接收字节数”(您可以通过更改参数来更改周期,并且您可以使用而不是S=10
测量传输的 BPS 而不是接收的 BPS )。不要忘记更改为您要监控的网络设备。tx_bytes
rx_bytes
eth0
当然,您不仅限于显示平均速率(如其他答案中所述,还有其他工具可以显示更好的输出),但是此解决方案很容易编写脚本来执行其他操作。
例如,下面的 shell 脚本(为了可读性分成多行)只有在 5 分钟的平均传输速度低于 10kBPS 时(大概是其他一些消耗带宽的进程完成时)才会执行 offlineimap 进程:
#!/bin/sh
S=300; F=/sys/class/net/eth0/statistics/tx_bytes
BPS=999999
while [ $BPS -gt 10000 ]
do
X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))";
echo BPS is currently $BPS
done
offlineimap
请注意,这/sys/class/...
是 Linux 特定的(可以,因为提交者确实选择了linux
标签),并且需要非过时的内核。Shell 代码本身与 /bin/sh 兼容(因此不仅 bash,而且 dash 和其他 /bin/sh 实现都可以工作)并且 /bin/sh 是真正总是安装的东西。
我喜欢iptraf
,但您可能必须安装它,而且它似乎不再被积极维护。
我发现 dstat 非常好。不过必须安装。为您提供比您需要的更多的信息。Netstat 将为您提供数据包速率,但也不会提供带宽。网络统计 -s
您可以使用 iperf 对网络性能进行基准测试(最大可能吞吐量)。有关详细信息,请参阅以下链接:
我无法让解析 ifconfig 脚本在 AMI 上为我工作,所以让它工作测量平均超过 10 秒的接收流量
date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference / 10` bytes per sec"
对不起,它曾经如此便宜和讨厌,但它奏效了!
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n
如果你想以 json 格式输出 (ifconfig -a) 你可以使用这个(python)