GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie soll ich die aktuelle Netzwerkauslastung ermitteln?

Ich denke, ifstat wird Ihnen helfen:

[[email protected] ~]# ifstat -i eth0 -q 1 1
       eth0
 KB/s in  KB/s out
 3390.26     69.69

Der einfachste Weg, dies zu tun, besteht wahrscheinlich darin, /proc/net/dev zu parsen (Seien Sie gewarnt, dass /proc ist nicht tragbar). Hier ist ein bash Skript, das ich schnell zusammengestellt habe, das in der Lage sein sollte, es zu berechnen:

#!/bin/bash

_die() {
    printf '%s\n' "[email protected]"
    exit 1
}

_interface=$1

[[ ${_interface} ]] || _die 'Usage: ifspeed [interface]'
grep -q "^ *${_interface}:" /proc/net/dev || _die "Interface ${_interface} not found in /proc/net/dev"

_interface_bytes_in_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
_interface_bytes_out_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

while sleep 1; do
    _interface_bytes_in_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
    _interface_bytes_out_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

    printf '%s: %s\n' 'Bytes in/sec'  "$(( _interface_bytes_in_new - _interface_bytes_in_old ))" \
                      'Bytes out/sec' "$(( _interface_bytes_out_new - _interface_bytes_out_old ))"

    # printf '%s: %s\n' 'Kilobytes in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 1024 ))" \
    #                   'Kilobytes out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 1024 ))"

    # printf '%s: %s\n' 'Megabits in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 131072 ))" \
    #                   'Megabits out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 131072 ))"

    _interface_bytes_in_old=${_interface_bytes_in_new}
    _interface_bytes_out_old=${_interface_bytes_out_new}
done

Denken Sie daran, dass sleep berücksichtigt nicht die Zeit, die für die Operationen in der While-Schleife benötigt wird, daher ist dies (sehr leicht) ungenau. Bei meiner 600-MHz-Kupfermine dauert die Schleife 0,011 Sekunden - eine vernachlässigbare Ungenauigkeit für die meisten Zwecke. Denken Sie auch bei der Verwendung der (auskommentierten) Kilobyte/Megabit-Ausgaben daran, dass Bash nur Integer-Arithmetik versteht.


Es gibt Netzwerkverkehrsmonitore wie vnstatt, die monatliche Aufzeichnungen über Ihren Datenverkehr führen, oder slurm, das seine Werte direkt aus den im Kernel gespeicherten Werten bezieht. Es ist in den meisten Distributions-Repos verfügbar.

Folgendes sehe ich, wenn ich slurm -i ra0 ausführe :


Linux
  1. Linux – Wie kann ich die Netzwerkfreigabe für den aktuellen Prozess aufheben?

  2. Wie kann ich feststellen, ob im Dateisystem in .net zwischen Groß- und Kleinschreibung unterschieden wird?

  3. Wie bekomme ich das aktuelle Betriebssystem in MSBuild?

  4. Wie steuere ich die Reihenfolge der Netzwerkschnittstellen?

  5. Wie bestimme ich die Baudrate einer seriellen Schnittstelle?

So verwenden Sie den Linux-Befehl mtr

Linux – Wie kann man feststellen, welches Modul den Kernel verschmutzt?

So verwenden Sie den netstat-Befehl unter Linux

Wie groß sollte die Swap-Partition sein?

Wie lösche ich die Schnittstellenstatistiken unter Linux?

So stellen Sie die bevorzugte Netzwerkschnittstelle unter Linux ein