1. 程式人生 > >2018-1-23 Linux學習筆記

2018-1-23 Linux學習筆記

包括 網絡狀態 1.10 區別 end 讀取 表示 域名服務器 相同

10.6 監控io性能
  • 本節主要學iostat和iotop兩個監io性能的命令.
  • iostat命令用於監視系統輸入輸出設備和CPU的使用情況.它匯報磁盤活動統計情況,同時也會匯報出CPU使用情況.iostat有一個弱點, 就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。
  • 直接使用iostat即可查看,但用iostat -x可查看更為詳細的信息(使用該命令應重點關註%util這一列)
    技術分享圖片
  • iotop命令用於監視磁盤I/O使用狀況. iotop具有與top相似的UI,其中包括PID、用戶、I/O、進程等相關信息. Linux下的IO統計工具如iostat只能統計到per設備的讀寫情況, 如果想知道每個進程是如何使用IO的,使用iotop命令可以很方便的查看.
    技術分享圖片

    10.7 free命令

  • free命令用於查看內存的使用情況(使用該命令應重點關註available這一列).
  • free -m/-g/-h --->以M/G/系統認為合適的單位顯示內存使用情況
  • buffer/cache區別
    磁盤--->內存(cache)--->CPU
    CPU--->內存(buffer)--->磁盤

  • 公式: total=used+free+buff/cache
  • available包含free和buffer/cache的剩余部分
    技術分享圖片

    10.8 ps命令

  • ps命令用於查看當前系統的進程狀態.可以搭配kill指令隨時中斷、刪除不必要的程序.使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等, 大部分信息都是可以通過執行該命令得到.
  • 常用用法:
    ps aux | grep 命令名
    ps -elf
    選項含義:
    a : 顯示現行終端機下的所有程序,包括其他用戶的程序
    u : 以用戶為主的格式來顯示程序狀況
    x : 顯示所有程序,不以終端機來區分
    -e : 此選項的效果和指定"A"選項相同
    -l或l : 采用詳細的格式來顯示程序狀況
    -f : 顯示UID,PPIP,C與STIME欄位
    -A : 顯示所有程序

  • STAT部分說明:
    D 不能中斷的進程
    R run狀態的進程
    S sleep狀態的進程
    T 暫停的進程
    Z 僵屍進程
    < 高優先級進程
    N 低優先級進程
    L 內存中被鎖了內存分頁
    s 主進程
    l 多線程進程
    + 前臺進程
    技術分享圖片
    技術分享圖片

    10.9 查看網絡狀態

  • netstat命令可用於查看網絡狀態信息.
  • 常用用法:
    netstat -lnp --->查看監聽端口(重點關註Active Internet connections (only servers)這一部分)
    netstat -an --->查看系統的網絡連接狀況(重點關註state狀態為ESTABLISHED的情況,一般該狀態個數1000以內,過大則需重點關註排查)
    選項含義:
    -a : 顯示所有連線中的Socket
    -l : 顯示監控中的服務器的Socket
    -n : 直接使用ip地址,而不通過域名服務器
    -p : 顯示正在使用Socket的程序識別碼和程序名稱
    技術分享圖片
    技術分享圖片
  • 小技巧:
    統計系統當前各種狀態的連接的數目:
    netstat -an | awk ‘/^tcp/{++sta[$NF]}END{for(key in sta)print key,"\t",sta[key]}‘
    技術分享圖片
    補充:
    ss -an 和 netstat 用途相似.

    10.10 linux下抓包

  • tcpdump命令用於抓取網絡包,,它可以打印所有經過網絡接口的數據包的頭信息,也可以使用-w選項將數據包保存到文件中, 方便以後分析.
  • 常用用法:
    tcpdump -nn -i ens33 --->抓取經過網卡ens33的數據包
    tcpdump -nn port 80 -i ens33 --->抓取80端口的數據包
    tcpdump -nn not port 22 and host 192.168.1.100 --->抓取非22端口並且來自IP為192.168.1.100的數據包
    tcpdump -nn -c 100 -w /tmp/1.cap --->抓取100包並保存到文件/tmp/1.cap
    tcpdump -r /tmp/1.cap --->讀取文件/tmp/1.cap
    技術分享圖片

  • tshark命令用於抓取並分析網絡包.
    使用tshark命令需先安裝wireshark包
    yum install -y wireshark
    小技巧:
    顯示訪問http請求的域名以及uri:
    tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

擴展知識:
TCP協議的三次握手四次揮手機制簡單原理(相關知識來自網絡,感謝原作者).

  • 三次握手:
    1.A向B發起建立連接請求: A--->B
    2.B收到A的發送信號,並且向A發送確認信息: B--->A
    3.A收到B的確認信號,並向B發送確認信號: A--->B

通過第一次握手,B知道A能夠發送數據.
通過第二次握手,A知道B能夠發送數據.
結合第一,二次握手,A知道B能夠接收數據.
結合第三次握手,B知道A能夠接收數據.

  • 四次揮手:
    1.A向B發起請求,表示A沒有數據要發送了: A--->B
    2.B向A發送信號,確認A的斷開連接請求: B--->A
    3.B向A發送信號,請求斷開連接,表示B沒有數據要發送了: B--->A
    4.A向B發送確認信號,同意斷開: A--->B

為何第2,3次揮手不能合在一次揮手中呢?因為此時A雖然不再發送數據了,但還能接收數據,B可能還有數據要發送給A,所以兩次揮手不能合並為一次.

揮手次數比握手多一次,是因為握手過程,通信只需要處理連接即可.而揮手過程,通信除了處理連接,還要處理數據.

2018-1-23 Linux學習筆記