シェルスクリプト解析サーバーのパフォーマンス

アウトライン

私たちは、もともとは、サーバー上のパフォーマンスを分析したい、あなたはLinuxの一連のコマンドを実行する必要があります。Linuxのコマンドなじみのない人のために、より多くの困難

今、シェルスクリプトの統合セットは、一般的に使用されるLinuxのコマンドは、それに含まれている、パフォーマンスのボトルネックの解析をワンクリック

 

スクリプト機能

1、表示CPU使用率と負荷(トップ、vmstatの、SAR)

図2は、ディスク、iノードの利用率とI / O負荷(DF、IOSTAT、iotopの、SAR、DSTAT)を表示します

図3に示すように、ビューのメモリ使用量(遊離、vmstatの)

4.チェックTCPコネクション(netstatコマンド、SS)

図5は、10のまでの処理(トップ、PS)のCPUとメモリフットプリントを表示します

図6に示すように、ビューのネットワークトラフィック(ifconfigコマンド、iftop、iptraf)

 

スクリプトは次のよう

#!/ binに/のbash 
#1 
os_check(){ 
        もし[-eの/ etc / RedHatの放出]。その後、
                = `猫の/ etc / redhatのリリースREDHAT |カット-d ' '-f1` 
                DEBIAN =`猫の/ etc /問題| -dカット'' -f1` 
        Fiの
        [ "$のREDHAT" == "のCentOS"の場合-o "$のREDHAT" == "赤"]; その後、
                P_M = YUM 
        のelif [ "$ DEBIAN" == "Ubuntuの" -o "$ DEBIAN" == "ubutnu"]; その後、
                P_M = apt-getを
        他の
                オペレーティングシステムがサポートしていません。
                1番出口
        Fiの
} 
[$ LOGNAME =ルート!]であれば、その後、
    「エコー
Fiが
    んdisk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_top10トラフィックが終了しcpu_loadで入力を選択します。行う
もし!これは、vmstat&>を/ dev / null; その後、
        「今すぐインストール、vmstatのコマンドが見つかりません。」エコー 
        睡眠1 
        os_checkの
        $のP_Mはprocpsのは、-yインストール
        ---------------------------------------」エコー--------------------------------」
Fiが
あれば!これIOSTAT&>を/ dev / null; その後、
        「今すぐインストール、iostatコマンドが見つかりません。」エコー 
        睡眠1 
        os_checkの
        $のP_Mはsysstatの-yインストール
        ---------------------------------------エコー」 --------------------------------」
Fiの

真の間、やる
        におけるケース$入力
            cpu_load)を
                #CPU利用率与负载
                "---------------------------------------"エコー
                I = 1 
                しばらく[[$ I -le 3]。やる
                    エコー-e "\ 033 [32メートル参考值$ {I} 033 [0メートル\" 
                    UTIL = `vmstatの|のawk '{場合(NR == 3)プリント100- $ 15 "%"}'` 
                    USER = `vmstatの| AWK '{(NRの== 3)は$ 13印刷する場合、 "%"}' ` 
                    SYS =`のvmstat | AWK '{(NRの== 3)は、 "%"は$ 14印刷する場合} ` 
                    IOWAIT =`のvmstat | AWK「{もし(NRの== 3)印刷$ 16 "%"} ' ` 
                    エコー"使用率:$ UTIL" 
                    エコー"ユーザー使用:$ユーザ" 
                    エコー"システムの使用:$ SYS" 
                    エコー"
                    睡眠1 
                    WRITE =` IOSTAT -x - K |のawk「/ ^ [V | S] / {OFS = ":
                行わ
                エコー「---------------------------------------」
                破る
                ;; 
            disk_load) 硬盘I / O负载
                エコー"---------------------------------------" 
                I = 1 
                [[$ iは3] -Le]つつ。やる
                    エコー-e "\ 033 [32メートル参考值$ {I} \ 033 [0メートル" 
                    UTIL = `のiostat -x -k | awkの「/ ^ [V | S] / {OFS = ":"; $ 1印刷し、$ NF "%"} '` 
                    READ =` IOSTAT -x -k | AWK '/ ^ [V | S] / {OFS = ": "; $ 1、$ 6" KBを"}印刷' ` 
                    IOWAIT =`のvmstat | AWK' 「{ "%"(NRの== 3)$ 16印刷する場合}
                    :-e "$ IOWAIT I / O待ち"エコー
                    エコー-e "読み取り/秒:\ nは$ READ" 
                    エコー-e "の書き込み/秒:\ nは$ WRITE" 
                    I = $(($ I + 1))
                    睡眠を1 
                行わ
                エコー「---------------------------------------」
                破る
                ;; 
            disk_use)
                硬盘利用率
                DISK_LOG =を/ tmp / disk_use.tmp 
                DISK_TOTAL = `のfdisk -l | awkの「$ 2" /^Disk.*bytes/&&/\/dev/{printf「;のprintf "%d個"、$ 3;印刷「GB」} ' ` 
                    [$ iの90 -gt]場合は、その後、
                $ USE_RATEで私のために。
                        = `DF -h PARTを|のawk '{場合(== INT($ 5)' '' $ i 'を' ')$ 6印刷}'` 
                        エコー"の$ PART = $ {I}%" >> $ DISK_LOGの
                    fiが
                完了
                「---------------------------------------」エコー
                エコー-e「ディスクの合計:\ n個の$ {DISK_TOTAL}」
                もし[-f $ DISK_LOG]。その後、
                    「---------------------------------------」エコー
                    猫$ DISK_LOG 
                    「エコー- -------------------------------------」
                    「ディスク使用率がないパーティションの90%を超える。」エコー 
                    "---------------------------------------"エコー
                Fi回線
                ブレーク
                ;; 
            disk_inode) 硬盘iノード利用率
                INODE_LOG =を/ tmp / inode_use.tmp 
                INODE_USE = `DF -i |のawk '/ ^ \は/ dev / {印刷INT($ 5)}'` 
                $ INODE_USEで私のために。行う
                    場合は、[$ iの-gt 90]。その後、
                        PART = `DF -h | awkの'{場合(INT($ 5)==' ' '$ 6印刷'が$'私は'')}'` 
                        エコー"の$ PART = $ {I}%" >>
                [-f $ INODE_LOG]であれば、その後、
                    エコー"---------------------------------------" 
                    のrm -f $ INODE_LOG 
                他の
                    エコー「---------------------------------------」
                    いいえ90%以上のエコー「iノード使用率パーティションの。」
                    "---------------------------------------"エコー
                Fi回線
                ブレーク
                ;; 
            mem_use) 内存利用率
                エコー"---------------------------------------" 
                MEM_TOTAL = `無料-m |のawk「{(NR == 2)のprintf "%の.1f"であれば、$ 1024分の2} END {印刷"G" 
                USE = `無料-m | awkの'{場合(NR == 3)のprintf "%の.1f"、$ 1024分の3} END {印刷"G"}'` 
                FREE = `無料-m | awkの 
                CACHE = `フリー-m | AWK「{IF(NR == 2)のprintf "%の.1f"、($ 6 + $ 7)/ 1024} END {印刷"G"} ` 
                エコー-e "合計:$ MEM_TOTAL" 
                エコー-e "を使用します。$ USE" 
                エコー-e"無料:$ FREE " 
                エコー-e "キャッシュ:$ CACHE" 
                エコー" ---------------------------------- -----」
                壊れ
                ;; 
            tcp_status)
                网络连接状态
                エコー"---------------------------------------" 
                COUNT = `netstatの-antp | awkの 
                エコー- E "TCP接続状況ます:\ n $をCOUNT" 
                エコー「------------------------------------- - 」
                ;; 
            cpu_top10)
                #占用CPUの高的前10个进程
                ---------------------------------------」エコー「
                CPU_LOG = / TMP / cpu_top.tmp 
                I = 1 
                [[$ iが3] -Le]つつ。
                    #ps AUX | AWK「{IF($ 3>の0.1)プリント"CPU: "$ 3" % - >"、$ 11 $ 12 $ 13 $ 14 $ 15 $ 16 "(PID:" $ 2 ")" |」ソート-k2 -nr |ヘッド10" } '> $ CPU_LOGの-n 
                    のPS AUX | AWK' {IF($ 3>の0.1){{printfの"PID: "$ 2" CPU "$ 3" % - >"}の( <= NFを、私は++)の場合(I == NF)のprintf $を私は"\ n"は、そうでないのprintf $ I}}」|並べ替え-k4 -nr | -10ヘッド>私は、私は、11 = $ CPU_LOG 
                    あれば[[ - N `猫はCPU_LOG`]] $。その後、
                       "-eエコー
                    他に
                        、 "プロセスのCPUを使用した。いいえ"エコー
                        BREAK 
                    Fiの
                    I $ =((私は$を+ 1))
                    SLEEP。1は
                DONE 
                ----------------------」エコー----------------- " 
                BREAK 
                ;; 
            mem_top10) は10個のプロセスの前に、高いメモリを占有
                エコー" ---------------- -----------------------「
                MEM_LOG =を/ tmp / mem_top.tmp 
                I =。1
                [[$ iが3] -Le]ながら、行う
                    #ps AUX | AWK「{IF($ 4> 0.1)プリント"メモリー: "$ 4" % - >"、$ 11 $ 12 $ 13 $ 14 $ 15 $ 16 "(PID:" $ 2 ")" |」ソート-k2 -nr |ヘッド10" -n} '> $ MEM_LOG 
                    PS AUX | AWK' {IF($ 4> 0.1){{printfの"PID: "$ 2"メモリ: "$ 3" % - >"}(のための<= NFを、私は++)の場合(I == NF)のprintf $を私は"\ n"は、そうでないのprintf $ I}}」|並べ替え-k4 -nr | -10ヘッド>私は、私は、11 = $ MEM_LOG 
                    あれば[[ - N `猫はMEM_LOG`]] $。その後、
                        エコー-e "\ 033 [32メートル参考值$ {I} \ 033 [0メートル" 
                        猫$ MEM_LOG 
                        > $ MEM_LOG 
                        エコー"
                    私は= $(($ I + 1)) 
                    そうでありません
                行わ
                エコー「---------------------------------------」
                破る
                ;; 
            交通)
                #查看网络流量
                真しばらく; 
                    "ネットワークカード名(ETH [0-9]やEM [0-9])を入力してください:" -p読みETH 
                    の#if [[$ ETH =〜^ ETH [0-9] $]]を|| [[$ ETH =〜^全角[0-9] $]] && [[ `ifconfigコマンド|グレップの-c "\ <$ ETH \>"` -eq 1]]; そして、
                    もし[ `ifconfigコマンド|グレップ-c "\ <$ ETH \>"` -eq 1]; その後、
                            壊れ
                        エコー「入力フォーマットエラーや、カード名を持ってもう一度入力を喜ばないでください。」
                「---------------------------------------」エコー
                ではエコー-e」--- ---アウト」
                I = 1 
                [[$ iの3] -Le]ながら、やる
                    #OLD_IN = `ifconfigコマンド$ ETHに|のawk '/ RXバイトが/ {$ 2印刷}' | -dカット:-f2` 
                    NEW_OUT =` ifconfigコマンド$ ETH | AWKの-F '[:] +「/バイト/ {(NRの== 8)$ 9印刷する場合、他の場合(NRの== 7)} $ 6印刷'` 
                    INは=' AWK'{printfの"%の.1fを\ n" BEGIN、 
                    #OLD_OUT =` ifconfigコマンド$ ETH | awkの/ RXバイトが/ {$ 6印刷} '|カット- D:-f2` 
                    OLD_IN = `ifconfigコマンド$ ETH | AWK -F '[:] + '/バイト/ {(NRの== 8)が$ 4印刷する場合、そうでなければ(NRの== 5)$ 6印刷する場合}'
                    OLD_OUT = `ifconfigコマンド$ ETH | AWK -F '[:] + '/バイト/ {(NRの== 8)場合、$ 9印刷、他の(NRの== 7)$ 6印刷する場合}`' 
                    スリープ1 
                    NEW_IN =' ifconfigコマンド$ ETH | AWK -F '[:] + '/バイト/ {(NRの== 8)が$ 4印刷する場合、そうでなければ(NRの== 5)$ 6印刷する場合}'' 
                    OUT = 'AWKが「{printfの「%をBEGIN .1f \ n」、 '$(($ {NEW_OUT} - $ {OLD_OUT}))' / 128分の1024} ' ` 
                    エコー"$ {IN} MB / sの$ {OUT} MB / sの" 
                    I = $( ($ I + 1))
                    1寝
                て行わ
                エコー「-------------------------------------- - 」
                壊れ
                ;;
                        )終了
                                終了0を 
                                ;; 
               *)
                    エコー「---------------------------------------」
                    エコー「番号を入力してください。」
                    エコー " -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -"
        ESACは
    終わっ
行われ

 

以下の営業成績

#1のSH show_sys_info.sh

 

 

 

1)cpu_load:CPU分析

 

 

 

 

 

UTIL:CPU使用率

ユーザーの使用:ユーザーのCPUの割合

システム使用:CPUシステムの割合

I / O待ち:I / Oの割合を待ちます

 

三つのリフレッシュ間隔を1秒

 

2)ディスクを解析disk_load

 

 

 

Utilの:秒あたりに処理ディスクの割合
VDA:
I / O待ち:待ち時間IO
読み取り/秒:ディスクの読み取りあたりのデータ量
:VDA
書き込み/ S:秒あたりのディスク書き込みデータ量
VDA:

 

3)disk_useのディスク使用量

 

 

 

ディスクの合計:ディスクとディスクパーティション使用回数を印刷

 

4)disk_inodeディスクが印刷され、90%以上が存在する場合inodo

 

5)mem_useメモリ使用量

合計:総メモリ

使用:メモリを使用

空き:空きメモリ

キャッシュ:キャッシュメモリ

 

6)TCP状態をtcp_status 

 

 

 

7)cpu_top10占有CPU 10の最大プロセス

10の最大のプロセスのために8)mem_top10メモリ

カードを表示する9)トラフィックのフローとアウト 

 

おすすめ

転載: www.cnblogs.com/Zfc-Cjk/p/11490648.html