Как я могу получить текущую статистику пропускной способности сетевого интерфейса по Linux/UNIX? [закрытый]

Самый гибкий способ сделать это - преобразовать его в struct tm, а затем использовать strftime (это похоже на sprintf для времени). Что-то вроде:

std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::tm now_tm = *std::localtime(&now_c);
/// now you can format the string as you like with `strftime`

Посмотрите документацию для strftime здесь .

Если у вас есть localtime_s или localtime_r, вы должны используйте либо предпочтительнее localtime.

Существует много других способов сделать это, но, в то время как в основном их проще использовать, они приводят к некоторому предопределенному строковому представлению. Вы можете просто «скрыть» все вышеперечисленное в функции для удобства использования.

92
задан Bernard 31 March 2009 в 09:06
поделиться

7 ответов

Можно проанализировать вывод ifconfig

19
ответ дан Mehrdad Afshari 5 November 2019 в 13:36
поделиться

Мне нравится iptraf , но, вероятно, необходимо установить его, и это кажется тому, чтобы не быть сохраняемым активно больше.

5
ответ дан Johannes Weiss 5 November 2019 в 13:36
поделиться

Вы могли проанализировать /proc/net/dev.

28
ответ дан codelogic 5 November 2019 в 13:36
поделиться

Я написал этот тупой скрипт давным-давно, он не зависит ни от чего, кроме 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 ---------^
44
ответ дан Nickolay 24 November 2019 в 06:22
поделиться

iftop does for network usage what top(1) does for CPU usage - http://www.ex-parrot.com/~pdw/iftop/

Я не знаю, как "стандартный" iftop, но я смог установить его с yum install iftop на Fedora.

156
ответ дан Aliaksandr Belik 24 November 2019 в 06:22
поделиться

Я нахожу, что dstat довольно хорош. Должен быть установлен все же. Дает Вам путь больше информации, чем Вам нужно. Netstat даст Вам скорости передачи пакетов, но не bandwith также. netstat-s

2
ответ дан 24 November 2019 в 06:22
поделиться

Помимо iftop и iptraf, проверьте также:

  • bwm-ng (монитор пропускной способности следующего поколения)

и / или

  • cbm (измеритель цветовой полосы пропускания)

ссылка: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html

15
ответ дан 24 November 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: