日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

系统资源统计

發布時間:2023/12/19 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 系统资源统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分析系統資源性能瓶頸腳本

一、腳本功能:

1.查看CPU利用率與負載(top、vmstat、sar),腳本中采用vmstat

2.查看磁盤、Inode利用率與I/O負載(df、iostat、iotop、sar、dstat),腳本中采用df、iostat

3.查看內存利用率(free、vmstat),腳本中采用free

4.查看TCP連接狀態(netstat、ss),腳本中采用ss

5.查看CPU與內存占用最高的10個進程(tcp、ps),腳本中采用ps

6.查看網絡流量(ifconfig、iftop、iptraf),腳本中采用ifconfig

二、腳本內容:

vim show_sys_info.sh

#!/bin/bash
#show system information

os_check(){  #檢查linux系統版本
    #檢查系統類型
    if [ -e /etc/redhat-release ];then   #如果存在/etc/redhat-release文件,則獲取文件內容
        REDHAT=`cat /etc/redhat-release |cut -d' ' -f1`   #獲取/etc/redhat-release文件內容并以空格進行分割后獲取第一列的數據
    else  #如果不存在/etc/redhat-release文件,則獲取/etc/issue 文件的內容,紅帽版本和德班版本都有這個文件,紅帽班這個文件不存系統類型,德班存在
        DEBIAN=`cat /etc/issue |cut -d' ' -f1` #獲取//etc/issue文件內容并以空格進行分割后獲取第一列的數據
    fi
    
    #根據系統類型選擇包管理(紅帽為yum,德班為apt-get)
    if [ "$REDHAT" == "CentOS" -o "$REDHAT" == "Red" ] ;then   #如果是centos系統或者red系統,則使用yum 為包管理
        P_M=yum
    elif [ "$DEBIAN" == "Ubuntu" -o "$DEBIAN" == "ubuntu" ] ;then  #如果是Ubuntu系統或者ubuntu系統,則使用apt-get 為包管理
        P_M=apt-get
    else  #否則答應系統不存在,程序退出,返回1(語句執行成功后,正常應該返回0.此處為異常返回,自定義返回值1)
        echo "Operating system does not support."
        exit 1
    fi
}

account_check(){
    #判斷是否為root用戶
    if [ "$LOGNAME" != "root" ];then  #系統變量$USER或者$LOGNAME都表示當前用戶名,如果當前用戶名不是root,則提示要用root用戶并且退出,返回值2
        echo "Please use the root account operation."
        exit 2
    fi
}
account_check   #調用用戶檢查函數

vmstat_check(){  #檢查指定的應用(vmstat)是否安裝,如果沒有則進行安裝
    which vmstat &>/dev/null    #執行which,命令查看執行的vmstat($1為函數的第一個位置參數,例如:如果為vmstat應用,則函數第一個位置參數傳遞vmstat)
                                #&>/dev/null為將執行的which命令后輸出的結果重定向到垃圾桶中,即不顯示輸出的結果
                                #如果存在應用,則命令執行后的返回值為0.否則返回不是0
                                #vmstat為顯示內存使用情況的工具,一般系統自帶,
    if [ $? -ne 0 ];then   # $?表示上一條命令的執行后的返回值,如果上一條命令執行后的返回值不是0,則說明沒有找到該應用,進行安裝
        echo "vmstat command not found, now the install."   #打印說明
        sleep 1   #睡1秒
        os_check  #調用系統檢查函數,函數中定義的變量默認為全局變量,如果不希望是全局變量,則需要用local 定義變量
              $P_M install procps -y   #安裝procops,即可以找到vmstat

        
    fi
}

vmstat_check   #調用vmstat檢查函數

iostat_check(){  #檢查指定的應用(vmstat)是否安裝,如果沒有則進行安裝
    which iostat &>/dev/null    #執行which,命令查看執行的iostat($1為函數的第一個位置參數,例如:如果為vmstat應用,則函數第一個位置參數傳遞vmstat)
                                #&>/dev/null為將執行的which命令后輸出的結果重定向到垃圾桶中,即不顯示輸出的結果
                                #如果存在應用,則命令執行后的返回值為0.否則返回不是0
                                #iostat為監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息,一般系統不自帶,需要安裝
    if [ $? -ne 0 ];then   # $?表示上一條命令的執行后的返回值,如果上一條命令執行后的返回值不是0,則說明沒有找到該應用,進行安裝
        echo "iostat command not found, now the install."   #打印說明
        sleep 1   #睡1秒
        os_check  #調用系統檢查函數,函數中定義的變量默認為全局變量,如果不希望是全局變量,則需要用local 定義變量
        $P_M install sysstat -y   #安裝sysstat,即可以找到iostat
        
    fi
}

iostat_check   #調用iostat檢查函數

#定義顏色變量
W_C_Red="33[32m"   #前景色(文字顏色)紅色
W_C_reset="33[0m"  #關閉所有屬性

#獲取cpu負載
get_cpu_load(){
    #cpu利用率和負載
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
    
        IDLE_CPU=`vmstat |awk '{if(NR==3)print $15"%"}'`  #使用awk命令獲取第三行以空格分割,第15列的內容,并且后面加上百分號(%)
        UITL_CPU=`vmstat |awk '{if(NR==3)print 100-$15"%"}'`  #使用awk命令獲取100減去第三行以空格分割,第15列的內容的差值,并且后面加上百分號
        USER_CPU=`vmstat |awk '{if(NR==3)print $13"%"}'`  #使用awk命令獲取第三行以空格分割,第13列的內容,并且后面加上百分號
        SYS_CPU=`vmstat |awk '{if(NR==3)print $14"%"}'`  #使用awk命令獲取第三行以空格分割,第14列的內容,并且后面加上百分號
        IOWAIT_CPU=`vmstat |awk '{if(NR==3)print $16"%"}'`  #使用awk命令獲取第三行以空格分割,第16列的內容,并且后面加上百分號
        
        #打印獲取到的內容
        echo "空閑占比:$IDLE_CPU"
        echo "使用占比:$UITL_CPU"
        echo "用戶使用占比:$USER_CPU"
        echo "系統使用占比:$SYS_CPU"
        echo "系統等待IO的CPU時間百分比:$IOWAIT_CPU"
        
        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取cpu負載,獲取到的是同一條數據
get_cpu_load_one(){
    #cpu利用率和負載
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
        vm_data="echo `vmstat`"   #vmstat獲取數據
        echo ${vm_data}   #打印vm_data的值
        IDLE_CPU=`${vm_data} |awk '{print $(NF-2)"%"}'`  #使用awk命令獲取第一行以空格分割,第倒數第3列的內容,并且后面加上百分號(%)
        UITL_CPU=`${vm_data} |awk '{print 100-$(NF-2)"%"}'`  #使用awk命令獲取100減去第一行以空格分割,倒數第3列的內容的差值,并且后面加上百分號
        USER_CPU=`${vm_data} |awk '{print $(NF-4)"%"}'`  #使用awk命令獲取第一行以空格分割,倒數第5列的內容,并且后面加上百分號
        SYS_CPU=`${vm_data} |awk '{print $(NF-3)"%"}'`  #使用awk命令獲取第一行以空格分割,倒數第4列的內容,并且后面加上百分號
        IOWAIT_CPU=`${vm_data} |awk '{print $(NF-1)"%"}'`  #使用awk命令獲取第三行以空格分割,倒數第2列的內容,并且后面加上百分號
        
        #打印獲取到的內容
        echo "空閑占比:$IDLE_CPU"
        echo "使用占比:$UITL_CPU"
        echo "用戶使用占比:$USER_CPU"
        echo "系統使用占比:$SYS_CPU"
        echo "系統等待IO的CPU時間百分比:$IOWAIT_CPU"
        
        let i++   #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取硬盤IO負載
get_disk_load(){
    #硬盤IO負載
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
    
        UTIL_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$NF"%"}'`  #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和最后一列,且后面加上百分號
        READ_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$6"KB"}'`  #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和第6列,且后面加上KB
        WRITE_DISK=`iostat -x -k |awk '/^[s|d]/{OFS=": ";print $1,$7"KB"}'`  #使用awk命令獲取iostat -x -k命令輸出內容中的以s或d開頭的行,將行以空格或者冒號分割后,打印第一列和第7列,且后面加上KB
        IOWAIT_CPU=`vmstat |awk '{if(NR==3)print $16"%"}'`  #使用awk命令獲取第三行以空格分割,第16列的內容,并且后面加上百分號
        
        #打印獲取到的內容
        echo -e "磁盤使用率:"
        echo -e "${UTIL_DISK}"
        echo -e "系統等待IO的CPU時間百分比:"
        echo -e    "$IOWAIT_CPU"
        echo -e "磁盤IO每秒讀的速度(Read/s):"
        echo -e "$READ_DISK"
        echo -e "磁盤IO每秒寫的速度(Write/s):"
        echo -e "$WRITE_DISK"
        
        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取硬盤利用率
get_disk_use(){
    #硬盤利用率
    DISK_LOG=/tmp/disk_use.tmp    #定義硬盤利用率日志記錄文件
    #使用fdisk -l命令獲取內容后,使用awk命令獲取其中以Disk開頭,間隔任意多個字符,且出現bytes,并且包含/dev的行,以空格分割,獲取其中第2列的內容,第3列中的整數部分,第四列中的內容,且在第4列內容前加一個空格,其后加上換行符
    DISK_TOTAL=`fdisk -l |awk '/^Disk.*bytes/ && //dev/{printf $2" ";printf "%d",$3;printf " "$4"
"}'`
    
    USER_RATE=`df -h |awk '/^/dev/{print int($5)}'` #執行df -h獲取內容后,使用awk獲取其中以/dev開頭的內容,將其以空格分割后,打印第5列中的整數部分
    
    local i   #定義局部變量i
    
    for i in ${USER_RATE};do
        if [ ${i} -gt 90 ];then  #如果變量i的值大于90,則記錄到文件中
            PART=`df -h |awk '{if(int($5)=='''${i}''') print $6}'`   #如果變量i的值等于awk獲得的第五列的值,則打印獲取第六列的值
            echo "$PART = ${i}%" >> $DISK_LOG   #追加內容到變量DISK_LOG文件中
        fi
    done
    
    echo "------------------------------------------------------------"
    echo -e "Disk total:
${DISK_TOTAL}"   #打印磁盤總量
    
    if [ -f ${DISK_LOG} ] ;then  #如果變量DiSK_LOG值對應的文件存在,則cat查看,并且看后刪除
        echo "------------------------------------------------------------"
        cat ${DISK_LOG}
        echo "------------------------------------------------------------"
        rm -rf ${DISK_LOG}
    else   #否則說明不存在大于90%
        echo "------------------------------------------------------------"
        echo "Disk use rate no than 90% of the partition."
        echo "------------------------------------------------------------"
        
    fi

}

#獲取硬盤inode利用率
get_disk_inode(){
    #硬盤利用率
    INODE_LOG=/tmp/inode_use.tmp    #定義硬盤利用率日志記錄文件

    INODE_USE=`df -i |awk '/^/dev/{print int($5)}'` #執行df -i獲取內容后,使用awk獲取其中以/dev開頭的內容,將其以空格分割后,打印第5列中的整數部分
    
    local i   #定義局部變量i
    
    for i in ${INODE_USE};do
        if [ ${i} -gt 90 ];then  #如果變量i的值大于90,則記錄到文件中
            PART=`df -i |awk '{if(int($5)=='''${i}''') print $6}'`   #如果變量i的值等于awk獲得的第五列的值,則打印獲取第六列的值
            echo "$PART = ${i}%" >> $INODE_LOG   #追加內容到變量DISK_LOG文件中
        fi
    done
    
    if [ -f ${INODE_LOG} ] ;then  #如果變量INODE_LOG值對應的文件存在,則cat查看,并且看后刪除
        echo "------------------------------------------------------------"
        cat ${INODE_LOG}
        echo "------------------------------------------------------------"
        rm -rf ${INODE_LOG}
    else   #否則說明不存在大于90%
        echo "------------------------------------------------------------"
        echo "Inode use rate no than 90% of the partition."
        echo "------------------------------------------------------------"
    fi

}

#獲取內存利用率
get_mem_use(){
    #內存利用率
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
    
        MEM_TOTAL=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}END{print "G"}'`  #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第二列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_USE=`free -m |awk '{if(NR==2)printf "%.1f",$3/1024}END{print "G"}'`  #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第3列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_FREE=`free -m |awk '{if(NR==2)printf "%.1f",$4/1024}END{print "G"}'`  #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第4列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_CACHE=`free -m |awk '{if(NR==2)printf "%.1f",$6/1024}END{print "G"}'`  #使用awk命令獲取free -m命令輸出內容中的第二行以空格分割的第6列的值除以1024后取1位小數的浮點數,之后再打印G
        
        #打印獲取到的內容
        echo -e "總內存:"
        echo -e "${MEM_TOTAL}"
        echo -e "已使用內存:"
        echo -e    "${MEM_USE}"
        echo -e "空閑內存:"
        echo -e "${MEM_FREE}"
        echo -e "已經緩存:"
        echo -e "$MEM_CACHE"
        
        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取內存利用率,同一條數據
get_mem_use_one(){
    #內存利用率
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
        free_data="echo `free -m`"   #free -m獲取數據
        echo ${free_data}   #打印free_data的值
    
        MEM_TOTAL=`${free_data} |awk '{printf "%.1f",$8/1024}END{print "G"}'`  #使用awk命令獲取free_data變量中的內容中的以空格分割的第8列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_USE=`${free_data} |awk '{printf "%.1f",$9/1024}END{print "G"}'`  #使用awk命令獲取free_data變量中的內容中的以空格分割的第9列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_FREE=`${free_data} |awk '{printf "%.1f",$10/1024}END{print "G"}'`  #使用awk命令獲取free_data變量中的內容中的以空格分割的第10列的值除以1024后取1位小數的浮點數,之后再打印G
        MEM_CACHE=`${free_data} |awk '{printf "%.1f",$12/1024}END{print "G"}'`  #使用awk命令獲取free_data變量中的內容中的以空格分割的第12列的值除以1024后取1位小數的浮點數,之后再打印G
        
        #打印獲取到的內容
        echo -e "總內存:"
        echo -e "${MEM_TOTAL}"
        echo -e "已使用內存:"
        echo -e    "${MEM_USE}"
        echo -e "空閑內存:"
        echo -e "${MEM_FREE}"
        echo -e "已經緩存:"
        echo -e "$MEM_CACHE"
        
        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取網絡連接狀態
get_tcp_status(){
    #內存利用率
    echo "------------------------------------------------------------"
    local i   #定義局部變量i
    i=1
    local j   #定義局部變量j
    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
    
        COUNT=`ss -ant |awk '!/State/{status[$1]++}END{for(j in status) print j,status[j]}'`  #使用awk命令獲取ss -ant命令輸出內容查找不包含State內容的行,以空格分割后獲取第一列數據保存到關聯數據status數組中,關聯數組的索引為第一列的內容,值為對應索引出現的次數
        #打印獲取到的內容
        echo -e "TCP connection status:
$COUNT"

        
        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取占用CPU高的前10個進程
get_cpu_top10(){
    #占用CPU高的前10個進程
    echo "------------------------------------------------------------"
    CPU_LOG=/tmp/cpu_top.tmp    #定義cpu_top的緩存文件
    
    local i   #定義局部變量i
    i=1
    local j   #定義局部變量i

    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        #使用ps aux獲取系統每一個進程的內容
        #之后使用awk命令,以空格分割每一行,如果每一行第3列的值大于0.0,則打印每行的第二例、第三列的內容,以及第11列及其以后的內容(如果有)
        #11列以后的打印規則:打印到最后一列后加上一個換行符
,不是最后一列不加換行符
        #NF為最后一列的列數
        #sort -k4 -nr:為將獲取到的內容用以空格分割后,以第四列為排序列,進行比較后倒敘排列
        #head -10:為將獲取到的內容取前10行的內容
        #最后將獲取到的內容記錄到$CPU_LOG文件中
        ps aux |awk '{if($3>0.0){{printf "PID: "$2" CPU: "$3"% -->"}for(j=11;j<=NF;j++)if(j==NF)printf $j"
";else printf $j}}'|sort -k4 -nr|head -10 >$CPU_LOG
        
        if [[ -n `cat $CPU_LOG` ]];then  #如果$CPU_LOG文件中的內容的長度不為0,即有內容,則打印顯示相應的內容
            echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
            cat $CPU_LOG  #顯示$CPU_LOG文件中的內容
        else  #否則顯示沒有進程使用CPU
            echo "NO process using the CPU"
            break  #退出while循環
        fi

        let i++    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取占用內存高的前10個進程
get_mem_top10(){
    #占用內存高的前10個進程
    echo "------------------------------------------------------------"
    MEM_LOG=/tmp/mem_top.tmp    #定義mem_top的緩存文件
    
    local i   #定義局部變量i
    i=1
    local j   #定義局部變量i

    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        #使用ps aux獲取系統每一個進程的內容
        #之后使用awk命令,以空格分割每一行,如果每一行第4列的值大于0.0,則打印每行的第二例、第三列的內容,以及第11列及其以后的內容(如果有)
        #11列以后的打印規則:打印到最后一列后加上一個換行符
,不是最后一列不加換行符
        #NF為最后一列的列數
        #sort -k4 -nr:為將獲取到的內容用以空格分割后,以第四列為排序列,進行比較后倒敘排列
        #head -10:為將獲取到的內容取前10行的內容
        #最后將獲取到的內容記錄到$MEM_LOG文件中
        ps aux |awk '{if($4>0.0){{printf "PID: "$2" Memory: "$4"% -->"}for(j=11;j<=NF;j++)if(j==NF)printf $j"
";else printf $j}}'|sort -k4 -nr|head -10 >$MEM_LOG
        
        if [[ -n `cat $MEM_LOG` ]];then  #如果$MEM_LOG文件中的內容的長度不為0,即有內容,則打印顯示相應的內容
            echo -e "${W_C_Red} 參考值${i} ${W_C_reset}"  #打印綠色文字后又恢復原色
            cat $MEM_LOG  #顯示$MEM_LOG文件中的內容
        else  #否則顯示沒有進程使用內存
            echo "NO process using the Memory"
            break  #退出while循環
        fi

        i=$(($i+1))    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#獲取網絡流量
get_traffic(){
    #查看網絡流量
    #判斷輸入的網卡是否存在
    while true;do
        read -p "Please enter the network card name: " eth
        if [ `ifconfig |grep -c "<${eth}>"` -eq 1 ];then   #如果查詢到網卡內容的個數等于1則說明輸入的網卡正確,否者讓再次輸入
            break
        else
            echo "Input format error or Don't have the card name,please input again."
        fi
    done
    
    echo "------------------------------------------------------------"
    echo -e "In ------ Out"
    
    local i   #定義局部變量i
    i=1

    while [[ $i -le 3 ]];do  #[[]]為數值運算符號,-le為小于等于,當變量值i小于等于3時執行while循環
        #CentOS6和CentOS7 ifconfig輸出進出流量信息位置不同
        #ContOS6中RX和TX行號等于8
        #ContOS7中RX行號是5,TX行號等于7
        #獲取上一秒的輸入輸出流量
        OLD_IN=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'`  #獲取ifconfig $eth內容后
                                                          #使用awk命令將獲取到的內容按照冒號或者空格分割
                                                          #并且查找包含bytes的行,如果行號等于8,就打印改行第4列內容
                                                          #如果行號是5,就打印改行第6列內容
        OLD_OUT=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
        echo ${OLD_IN}
        echo ${OLD_OUT}
        sleep 1  #間隔1秒
        #獲取下一秒的輸入輸出流量
        #每秒的流量就是(下一次減去上一次再除以間隔的秒數)
        NEW_IN=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'` 
        NEW_OUT=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
        echo ${NEW_IN}
        echo ${NEW_OUT}
        IN=`awk 'BEGIN{printf "%.4f
",'$((${NEW_IN}-${OLD_IN}))'/1024/128}'`  #使用awk的BEGIN,新值減去舊值,除以1024再除以128
                                                             #1M帶寬=1024kb/8bit=128KB(1M帶寬對應的下載速度為128KB)
                                                             #1024Kbits/s=128KBytes/s
                                                             #1024Kbps的全稱為1024Kbits/s,即單位是元,而128KBytes/s的單位是字節,一個字節等于8位元
                                                             #有線寬帶的寬帶的換算方法:1Mbps=1024/8(KBps)=128KBps,即128KBytes/s
                                                             #50M帶寬對應的下載速度為50*126=6400KB
        OUT=`awk 'BEGIN{printf "%.4f
",'$((${NEW_OUT}-${OLD_OUT}))'/1024/128}'`
        
        echo "${IN}MB/s ${OUT}MB/s"  #打印相應的值
        
                                                            
        i=$(($i+1))    #變量i加1賦值給變量i(i自加1)
        sleep 1   #睡1秒
    done
    echo "------------------------------------------------------------"
}

#定義PS3的內容(select選擇的內容提示信息)
PS3="Your choice is: "

#使用while死循環顯示select循環內容
display_select(){
    while true;do
        select input in cpu_load disk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_top10 traffic quit;do
            #從in后面中選擇一個賦值給input變量
            #此處使用case處理input變量對應值的情況
            case $input in
                cpu_load)
                    #調用獲取cpu負載函數
                    get_cpu_load_one
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                disk_load)
                    #調用獲取硬盤IO負載函數
                    get_disk_load
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                disk_use)
                    #調用獲取硬盤利用率函數
                    get_disk_use
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                disk_inode)
                    #調用獲取硬盤inode利用率函數
                    get_disk_inode
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                mem_use)
                    #調用獲取內存利用率函數
                    get_mem_use
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                    
                tcp_status)
                    #調用獲取網絡連接狀態函數
                    get_tcp_status
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                cpu_top10)
                    #調用獲取占用CPU高的前10個進程函數
                    get_cpu_top10
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                mem_top10)
                    #調用獲取占用內存高的前10個進程函數
                    get_mem_top10
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                    
                traffic)
                    #調用獲取網絡流量函數
                    get_traffic
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                quit)
                    exit     #退出腳本,退出程序
                    ;;       #case一個條件結束符號
                
                *)   #*代表其他任意內容,如果是其他任意內容,則提示輸入相應內容且退出循環
                    echo "------------------------------------------------------------"
                    echo "Please enter the number."
                    echo "------------------------------------------------------------"
                    break    #跳出select循環,繼續while循環
                    ;;       #case一個條件結束符號
                
                
            esac
        done
    done
}

$1  #腳本第一個位置參數,賦值后調用相應的函數

:wq!:保存

chmod a+xshow_sys_info.sh :給腳本show_sys_info.sh賦可執行權限

./show_sys_info.shdisplay_select :執行腳本,調用display_select函數

總結

以上是生活随笔為你收集整理的系统资源统计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。