天天看點

系統監測和性能分析工具

  作為一名linux運維工程師來說,對linux系統的日常管理,檢測和系統性能的分析是必不可少的。也有一些針對系統監測和性能分析的工具。咱們現在就來了解一下。

tcpdump指令:

                   網絡抓包工具,過濾資料包或者定制輸出格式:

      常用選項:

             -n :  用IP位址表示主機,用數字表示端口号。

             -i  : 監聽網卡接口,

             -i  any :   抓取所有網卡接口的資料包。

             -v  :  輸出詳細資訊。

             -t :  不列印時間戳

             -e :  顯示以太網幀頭部資訊。

             -x  :  以十六進制數顯示資料包的内容。

            -X  :  列印每個十六進制位元組對應ascii字元。

           -XX :  列印以太網幀的頭部資訊。

            -s :   設定抓包時的抓取長度。預設的抓包長度被修改為65535位元組。

           -S  :   絕對值顯示TCP封包段的序号。

          -w  :  将tcpdump的輸出以特定格式定向到某個檔案。

           -r  :  從檔案讀取資料包資訊并顯示。

   tcpdump表達式操作數:

             類型(type): 解釋其後面緊跟着的參數的含義。

                  支援的類型包括:host, net,port,portrange. 可分别指定(IP位址),

                                    用CIDR方法表示的網絡位址,端口号和端口範圍。

                      例如: tcpdump net  1.0.0.0/8

             方向(dir): src指定資料包的發送端,dst指定資料包的目的端。

                      例如:tcpdump  dst  port  53

            協定(proto): 指定目标協定,

                  例如: tcpdump    icmp

        支援邏輯操作符:and(&&),  or(||),  not(!)

             例如:

                 tcpdump ip host 主機名 and not 主機名

        如果表達式較複雜:用括号分組,用反斜杠\ 或單引号轉義。

             例如: tcpdump 'src 1.1.1.1 and (dst port 3389 or 22)'

       使用部分協定字段的内容來過濾資料包

            例如:tcpdump 'tcp[13] & 2 != 0'

lsof 指令: 

            列出目前系統打開的檔案描述符的工具。

          常用選項:

                -i : 顯示socket檔案描述符。

          使用方法:

               lsof -i [46] [protocol][@hostname][ipaddr][:service|port]

                 說明: 

                        4: ipv4協定

                        6: ipv6協定。

                        protocol 指定傳輸層協定。

                        hostname 指定主機名。

                        ipaddr   主機IP位址。

                        service  指定服務名

                        port     指定端口号。

               -u : 顯示指定使用者啟動的所有程序打開的所有檔案描述符。

               -c : 顯示指定的指令打開的所有檔案描述符。

                   例如:lsof  -c  httpd

              -p : 顯示指定程序打開的所有檔案描述符。

              -t  : 顯示打開了目标檔案描述符的程序PID。

       使用:

              #lsof -p  程序号

             輸出資訊詳解:

                      COMMAND : 執行程式所用的指令。

                      PID : 檔案描述符所屬程序的PID

                      USER : 使用者名。

                      FD : 檔案描述符的描述。

                             cwd : 程序的工作目錄。

                             rtd : 使用者的根目錄。

                             txt : 程序運作的程式代碼。

                            mem : 映射到記憶體的檔案。

                     FD以數字+通路權限表示。

                           數字: 檔案描述符的具體數值。

                           通路權限:r(可讀) ,  w(可寫),u(可讀可寫)

                           0u,1u,2u :标準輸入,标準輸出,标準錯誤輸出。

                           3u : 處于LISTEN狀态的監聽socket

                           4u :epoll核心事件對應的檔案描述符。

                    TYPE:檔案描述符類型。

                         DIR : 目錄。

                         REG :  普通檔案。

                         CHR :  字元裝置檔案

                        IPv4 : IPv4類型的socket檔案描述符。0000是未知類型。

                   DEVICE : 檔案所屬裝置,

                         字元裝置和塊裝置:主裝置号,此裝置号。

                         程式檔案和動态庫:8:SCSI硬碟。 3 : 該硬碟的第3個分區。

                   FIFO類型的檔案:例如:管道和socket ,

                                       顯示一個核心引用目标檔案的位址。

                   SIZE/OFF : 檔案大小或者偏移值。

                   0t/ox : 偏移值。否則是檔案大小。

                   NODE : 檔案的i節點号,對于socket,則顯示為協定類型。

                   NAME : 檔案名

nc 指令:

          用來快速建構網絡連接配接。可以伺服器方式運作,也可以用戶端方式運作。

           預設以用戶端方式運作。

        常用選項:

                 -i : 設定資料包傳送的時間間隔。

                 -l : 以伺服器方式運作,監聽指定端口。

                -k : 重複接收并處理某個端口的所有連接配接,與-l 一起使用。

                -n  : IP位址表示主機,數字表示端口。

                -s : 設定本地主機發送出的資料包的IP位址。

                -C : 将CR和LF兩個字元作為行結束符。

               -U : 使用unix本地域協定通信。

               -u :  使用UDP協定,預設使用TCP協定。

              -w :  未檢測到輸入,則退出。

              -X : 指定C-S之間使用的通信協定。

              -x :  指定目标代理伺服器的IP位址和端口号。

   例如:

     nc -x www:1080 -X connect www.yuan.com 80

             -z  :  掃描目标主機的某個服務是否開啟。

             -C  :  HTTP行結束符。

strace 指令:

           測試伺服器性能的工具。

           跟蹤程式運作過程中執行的系統調用和接收到的信号,并将系統調用名,參數,傳回值及信号名輸出到标準輸出和指定的檔案。

      常用的選項:

            -c  統計每個系統調用執行時間,執行次數和出錯次數。

            -f  跟蹤由fork調用生成的子程序。

            -t  加上時間資訊。

           -e  指定表達式,用來控制如何跟蹤系統調用。

      格式:

             [qualifier=][!]values1[,value2]......

              qualifier: trace,abbrev,verbose,raw,signal, read,write.   預設是trace.

      value 取值:

        -e trace=set : 隻跟蹤指定的系統調用。

        -e trace=file : 隻跟蹤與檔案操作相關的系統調用。

        -e trace=process : 跟蹤與程序控制相關的系統調用。

        -e trace=network : 網絡相關

        -e tace=signal : 信号相關

        -e trace=ipc : 與程序間通信相關

        -e signal=set  : 跟蹤指定的信号

        -e read=set : 輸出從指定檔案中讀入的資料。

        -o : 将strace的輸出寫入指定的檔案。

netstat指令:

           網絡資訊統計工具。列印本地網卡接口上的連接配接,路由表資訊,網卡接口資訊。

             -n  :  IP位址表示主機,數字表示端口。

             -a  : 包含監聽socket.

             -t  : 顯示TCP連接配接。

             -r :  顯示路由資訊

             -i  : 顯示網卡接口的資料流量。

             -c : 每隔1s輸出一次。

            -o : 顯示socket定時器的資訊。

            -p : 顯示socket所屬程序的PID和名字。

ifstat指令: 

    網絡流量監測工具。

     常見選項:

        -a  : 監測所有網卡接口。

        -i  :  指定要監測的網卡接口。

        -t  :  輸出資訊加時間戳。

        -b  : 以Kbit/s為機關顯示資料。

        delay :  采樣間隔。

        count : 采樣次數。

   例如:ifstat  -a  2  5

mpstat 指令:

    實時監測多處理器系統上每個cpu的使用情況。

        需要安裝sysstat 包。

           用法:mpstat [-p {|all}] [interval][count]]

             -p  : 指定要監控的CPU号。

             all  : 監聽所有的CPU

            interval : 采樣間隔。

            count  :  采樣次數。

       例如:#mpstat  -P  ALL  5  2

     輸出資訊:

          %usr :  除了nice值為負的程序,系統其他程序運作在使用者空間的時間占CPU總運作時間的比例。

          %nice :  nice值為負的程序運作在使用者空間的時間占CPU總運作時間的比例。

          %sys  :  系統上所有程序運作在核心空間的時間占CPU總運作時間的比例。

         %iowait  :  CPU等待磁盤操作的時間占CPU總運作時間的比例。

         %irq    :   CPU用于處理硬體中斷的時間占CPU總運作時間的比例。

         %soft   :  CPU用于處理軟體中斷的時間占CPU總運作時間的比例。

         %steal    :  一個實體CPU可以包含一對虛拟CPU,

                 由超級管理程式管理。當超級管理程式在處理某個虛拟CPU時,

                 另外一個虛拟CPU則必須等待它處理完成才能運作。

                 等待時間就是steal時間。該字段表示steal時間占CPU總運作時間的比例。

          %guest  :  運作虛拟CPU的時間占CPU總運作時間的比例。

          %idle  :  系統空閑的時間占CPU總運作時間的比例。

         主要注意:%usr, %sys, %idle的變化。

系統性能工具:

    sar指令:

            分析系統性能的重要工具。

            可擷取系統的CPU,運作隊列,磁盤I/O,分頁(交換區),記憶體,CPU中斷,網絡等性能資料。

        文法:

             sar [options] [-o filename] [interval [count]]

        選項含義:

             -A  :  顯示系統所有資源裝置(CPU,記憶體,磁盤) 的運作狀況。

             -u  :  顯示系統所有CPU在采樣時間内的負載狀态。

             -P: 顯示目前系統中指定CPU的使用情況。

            -d: 顯示所有硬碟裝置在采樣時間内的使用情況。

            -r : 顯示系統記憶體在采樣時間内的使用情況。

            -b: 顯示緩沖區在采樣時間内的使用情況。

            -v  :  顯示程序,檔案,節點和鎖表狀态。

           -n  顯示網絡運作狀态。

              參數:DEV  : 顯示網絡接口資訊。

                       EDEV : 顯示網絡錯誤的統計資料。

                       SOCK : 顯示套接字資訊。

                       FULL  : 顯示前三參數的所有資訊。

          -q  : 顯示了運作隊列的大小。

          -R  : 顯示程序在采樣時間内的活動情況。

          -y  : 顯示終端裝置在采樣時間内的活動情況。

         -w  :  顯示系統交換活動在采樣時間内的狀态。

         -o  filename, 将指令結果以二進制格式存放在檔案中,filename是檔案名。

         interval  :  表示采樣間隔時間。

         count :  表示采樣次數。預設值1.

       例如:

             檢視系統CPU的整體負載負載狀況。

               #sar   -u   3  5

         系統的CPU 從0開始。檢視第二個CPU的運作負載。

        #sar  -P  1 3 5

   檢視系統磁盤讀寫性能:

        #sar  -d 3 5

  檢視系統記憶體使用情況,網絡運作狀态:

       #sar  -r  5  2

       #sar  -n  DEV  5 3

             #sar  -u  3  5 

               輸出資訊詳解:

                  %user  :  使用者程序消耗的CPU時間百分比。

            %nice :  運作正常程序所消耗的CPU時間百分比。

            %system  : 系統程序消耗的CPU時間百分比。

                  %iowait  :   I/O等待所占用的CPU時間百分比。

            %steal  : 記憶體不足時,pagein強制對不同的頁面進行的steal操作。

            %idle  :   CPU處在空閑狀态的時間百分比。

              可分開查詢系統的每個CPU,統計每個CPU的 使用情況。

                #sar -P 0 3 5

iostat 指令:

           對系統的磁盤I/O操作進行監視。

          顯示磁盤讀寫操作的統計資訊。

          對系統整體情況進行分析。

          要安裝sysstat的工具包。

   文法:

         iostat [-c | -d] [-k] [-t] [-x [device]] [interval [count]]

   選項含義:

          -c  :  顯示CPU的使用情況。

          -d  : 顯示磁盤的使用情況。

          -k  : 每秒以KB為機關顯示資料。

          -t  : 列印出統計資訊開始執行的時間。

          -x device  :  指定要統計的磁盤裝置名稱,預設為所有磁盤裝置。

          interval  :  指定兩次統計間隔的時間。

          count  : 按照"interval" 指定的時間間隔統計的次數。

   組合使用:

         檢視系統磁盤的使用狀況:

            #iostat -d 2 3

   輸出内容詳解:

       Blk_read/s  :  每秒讀取的資料塊數。

       Blk_wrtn/s  : 每秒寫入的資料塊數。

       Blk_read  :  讀取的所有塊數。

       Blk_wrtn :  寫入的所有塊數。

 iostat -x 組合提供了對每個磁盤的單獨統計,預設是對所有磁盤進行統計。

     例如:iostat -x /dev/sda 2 3

       輸出内容解釋:

            rrqm/s  :  每秒進行合并的讀操作數目。

            wrqm/s  :  每秒進行合并的寫操作數目。

             r/s  :  每秒完成讀I/O裝置的次數。

             w/s :  每秒完成寫I/O裝置的次數。

            rsec/s  :  每秒讀取的扇區數。

           wsec/s : 每秒寫入的扇區數。

free 指令 :

           監控linxu記憶體使用狀況。

    選項: 

        -m  :  以M為機關的記憶體使用情況。

        -s  :  指定的時間段内不斷地監控記憶體的使用情況。

        -b :  以1024位元組為機關顯示記憶體使用情況。

  公式:

      可用記憶體/實體記憶體> 70% ,表示系統記憶體資源充足。

      可用記憶體/實體記憶體<20%時,系統記憶體資源緊缺。

      20%<可用記憶體/實體記憶體<70%時, 記憶體資源滿足應用需求。

如有什麼不對之處,敬請指正。