查看網卡流量

查看網卡流量除了用iftop等工具外,我們也可以自己寫個腳本,它的優勢就是在服務器比較卡的時候查看資源不會佔用很多系統資源!

  1. #!/bin/bash  
  2. NAME=nic_flow 
  3. PIDFILE=/var/tmp/$NAME.pid  
  4. LOGFILE=/var/tmp/$NAME.log  
  5.  
  6. function start(){  
  7.     if [ -f "$PIDFILE" ]; then  
  8.         echo $PIDFILE  
  9.         exit 2  
  10.     fi  
  11.     for (( ; ; ));do  
  12.         eth=$1  
  13.         [ -z "${eth:-}" ] && eth=eth0 
  14.         time_range=$2  
  15.         [ -z "${time_range:-}" ] && time_range=1        
  16.         ifconfig  | awk '{print $1}' | grep "eth" > /dev/null   
  17.         [ $? -gt 0 ] && echo "wrong NIC device" && exit 10  
  18.         RX_1=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+'  '{print $4}')  
  19.         TX_1=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')  
  20.         sleep $time_range  
  21.         RX_2=$(cat /proc/net/dev | grep "$eth" | awk -F'[ |:]+'  '{print $4}')  
  22.         TX_2=$(cat /proc/net/dev | grep "$eth" | awk '{print $9}')  
  23.         clear  
  24.         echo  -e "`date +%k:%M:%S`      RX        TX" | tee -a $LOGFILE   
  25.         RX=$((${RX_2}-${RX_1}))  
  26.         TX=$((${TX_2}-${TX_1}))  
  27.         if [[ $RX -lt 1024 ]];then  
  28.             RX="${RX}B/s" 
  29.         elif [[ $RX -gt 1048576 ]];then  
  30.             RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')  
  31.         else  
  32.             RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')  
  33.         fi  
  34.         if [[ $TX -lt 1024 ]];then  
  35.             TX="${TX}B/s" 
  36.  
  37.         elif [[ $TX -gt 1048576 ]];then  
  38.             TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')  
  39.         else  
  40.             TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')  
  41.         fi   
  42.         echo -e " $eth       $RX        $TX " | tee -a $LOGFILE  
  43.     done&   
  44.     echo $! > $PIDFILE  
  45. }   
  46. function stop(){  
  47.     [ -f $PIDFILE ] && kill `cat $PIDFILE` && rm -rf $PIDFILE  
  48. }  
  49.  
  50. case "$1" in  
  51.   start)  
  52.     start $2 $3  
  53.     ;;  
  54.   stop)  
  55.     stop  
  56.     ;;  
  57.   *)  
  58.     echo $"Usage:$0  {start|stop,NIC device(eth*), time_range(s)}"  
  59.     exit 2  
  60. esac 

使用

  1. [root@localhost ~]# ./nic_flow.sh start   
  2. 3:38:44      RX        TX  
  3. eth0       3B/s        138B/s   
  4. [root@localhost ~]# ./nic_flow.sh stop 

這個腳本可以接受額外的兩個參數:網卡參數和時間間隔參數!

  1. [root@localhost ~]# ./nic_flow.sh start lo 5  
  2.  5:50:05      RX        TX  
  3.  lo       2B/s        0B/s   
  4. [root@localhost tmp]# tail  /var/tmp/nic_flow.log   
  5.  5:47:04      RX        TX  
  6.  eth0       1B/s        0B/s   
  7.  5:47:05      RX        TX  
  8.  eth0       1B/s        0B/s   
  9.  5:49:55      RX        TX  
  10.  lo       0B/s        0B/s   
  11.  5:50:00      RX        TX  
  12.  lo       0B/s        0B/s   
  13.  5:50:05      RX        TX  
  14.  lo       2B/s        0B/s  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章