Domanda

I want to know, what the average transfer rate on a particular (VPN) interface of my linux system is.

I have the following info from netstat:

# netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0    264453      0      0 0        145331      0      0      0 BMRU
lo        16436 0    382692      0      0 0        382692      0      0      0 LRU
tun0       1500 0     13158      0      0 0         21264      0     12      0 MOPRU

The VPN interface is tun0. So this interface received 13158 packets and sent 21264 packets. My question based on this:

  • what is the time-frame during which these stats are collected? Since the computer was started?

    # uptime
    15:05:49 up 7 days, 20:40,  1 user,  load average: 0.19, 0.08, 0.06
    
  • how to convert the 13158 "packets" to kB of data so as to get kbps?

Or should I use a completely other method?

È stato utile?

Soluzione 2

If you look in /proc/net/dev instead of netstat -i, you can get bytes transmitted/received (also available via ifconfig or netstat -ie, but more easily parsed from /proc/net/dev). The counts are typically since the interface was created, which is usually boot time for "real" interfaces. For a tun interface, it's likely when the tunnel was started, which might be different than system boot, depending on when/how you're creating it...

Altri suggerimenti

Question 1:
The time frame is from the time the device was brought up until now (maybe days or weeks ago, try and figure from the logs!).
Which means that to get a practical average kbps number comparable to what you'd see in a system monitor or what e.g. top or uptime display for the CPU, you will want to read the current value twice (with, say, 1 second in between), and subtract the second value from the first. Then divide by the time (which is not necessary if you have a 1-second delay), multiply by 8, and divide by 1,000 to get kbps.

Question 2:
You don't. There is no way to convert "packets" to "bytes" as packets are variable sized. There is a "bytes" field that you can read.

Test case on my NAS box with some traffic going on:

nas:# grep eth0 /proc/net/dev ; sleep 1 ; grep eth0 /proc/net/dev
eth0:137675373  166558    0    0    0     0          0         0 134406802   41228    0    0    0     0       0          0
eth0:156479566  182767    0    0    0     0          0         0 155912310   44479    0    0    0     0       0          0

The result is: (155912310 - 134406802)*8/1000 = 172044 kbps (172 Mbps usage on a 1Gbps network).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top