0413 第十三次課:平常運維-系統監控

平常運維(上)

系統監控

  • 使用w查看系統負載html

  • vmstat命令linux

  • top命令ios

  • sar命令web

  • nload命令windows

  • 監控io性能centos

  • free命令緩存

  • ps命令服務器

  • 查看網絡狀態網絡

  • linux下抓包多線程

  • 擴展

    tcp三次握手四次揮手

    tshark幾個用法

1、w、vmstat、top、sar命令

  1. w命令查看系統負載
  • w命令能夠查看系統的運行狀況

    詳細解釋:

    信息 說明
    21:51:33 表示當前時間
    up 209 days 表示系統運行時間爲209天
    1 users 表示當前登陸用戶個數,能夠經過下面 USER行 查看當前的用戶
    TTY 登陸的方式 pts/0 表示網絡登陸 若是爲tty1-6 則是終端登陸
    LOGIN@ 表示用戶登陸時間
    IDLE 表示用戶空閒時間
    FROM 用戶登陸的ip
    JCPU 該終端相關進程任務所耗費的時間
    PCPU 表示WHAT或任務執行後耗費的CPU時間
    WHAT 表示當前執行的任務
  • 最經常使用的信息

    load average:後面3個數字分別表明過去1,5,10分鐘內CPU的負載狀況。這個數值表示cpu的使用狀況,通常來講只要不超過cpu的核數就是正常的

  • 查看cpu的核數

    cat /proc/cpuinfo 其中processor表示cpu的核數。從0開始計算,0就是表示核數爲1。

    或者使用lscpu命令查看


  1. vmstat命令

    vmstat命令能夠查看進程、內存、I/O等系統總體運行狀況

  • 用法:

    vmstat 1 5(1表示間隔時間爲1秒,5表示運行次數)


詳細說明

  • procs(進程):

    r:運行隊列中的進程數量

    b:堵塞的進程,網絡、硬盤等緣由致使的

  • memory(內存)

    • swpd:使用虛擬內存大小,若是數字大於0說明內存不夠

    • free:空閒物理內存大小

    • buff:做用緩存大小

    • cache:緩存大小

    • SWAP(交換區)

    • si:每秒從交換區寫到內存的大小

    • so:每秒寫入交換區的內存大小

  • IO(磁盤)

    • bi:每秒讀取的大小

    • bo:每秒寫入的大小

  • CPU

    • us:用戶佔用的cpu的百分比,若是長時間佔用超過50%說明cpu不夠了

    • sy:系統自己佔用的cpu百分比

    • id:空閒的cpu百分比

    • us+sy+id=100%

    • wa:等待cpu的百分比


  1. top命令

    top命令能夠動態的查看系統資源使用狀況相似於windows下的任務管理器,默認是三秒刷新一次。

  • 用法

    top -c:顯示進程的詳細信息

    top -bn1:靜態顯示

  • 經常使用操做

    按q:退出顯示

    按數字1:切換顯示cpu,以下:後面一張圖是按下1後顯示的第一塊CPU的使用信息。

    按M:按內存使用狀況排序

    按P:按cpu使用狀況排序。默認是安裝cpu使用大小排序的

  • 統計信息區

    第一行:

    和w命令顯示的第一行信息同樣

    第二行:

    total :進程總數

    running:正在運行的進程數

    sleeping :睡眠的進程數

    stopped :中止的進程數

    zombie :殭屍進程數

    第三行:

    主要參數

    us 用戶空間佔用CPU百分比

    sy 內核空間佔用CPU百分比

    id 空閒CPU百分比

    第四行:

    total:內存總量

    free:剩餘的內存

    used:使用的內存

    buff/cache: 緩存

    第五行:

    total: 交換空間總量

    free: 剩餘的交換空間

    used: 使用的交換空間量

  • 進程信息區:

    PID:進行id

    USER:進程所對應的用戶

    PR:優先級

    RES:進程使用的、未被換出的物理內存大小,單位kb。

    %CPU :進程所使用cpu佔比

    %MEM :進程使用內存佔比

    TIME+: 進程使用的CPU時間總計,單位秒

    COMMAND:命令行


  1. sar命令

    sar是一個很全面的監控命令,能夠監控cpu、磁盤i/o、網卡流量等。主要用來查看網卡流量和歷史的負載信息。

    若是沒有sar命令,能夠進行安裝:

    yum install -y sysstat

    安裝sar命令後,sar會每隔十分鐘在/var/log/sa目錄下生成系統的日誌文件。

    日誌文件類型分爲sa和sar開頭兩種,其中sa*是二進制文件,須要使用sar -f查看,sar*是文本文件直接查看便可。


  • sar命令查看網卡流量:

    sar -n DEV 1 10

    IFACE: 網卡名

    rxpck:接收到的數據包,單位秒

    txpck: 發出的數據包,單位秒

    rxKB: 接受的數據量,單位秒

    txKB:發出的數據量,單位秒

    須要注意的是若是接收的數據包和數據量超過10000,說明有被攻擊的可能。

  • 查看歷史網卡流量

    若是要查看28號的信息:

    sar -n DEV -f /var/log/sa/sa28

    sa28表示28號這一天的信息,查看20號就sa20便可。最多保留一個月,就是最多能夠查一個月前的信息。

  • 查看系統負載

    sar -q

  • 查看歷史負載:

    如查看10號的

    sar -q -f /var/log/sa10

2、nload、監控io、free、ps

  1. nload命令

    nload命令用來監控網絡流量,默認是沒有安裝的須要安裝使用。

    安裝:

    yum install epel-release

    yum install nload

    用法:

    nload

    第一行顯示網卡名、ip、當前網卡(能夠按左右鍵切換網卡)。按q退出

    nload 默認分爲上下兩塊:

    Incoming: 接收網卡的流量

    Outgoing:出去的流量

    Curr: 當前流量

    Avg: 平均流量

    Min: 最小流量

    Max: 最大流量

    Ttl: 總流量


  2. 監控io

    磁盤io監控有兩個命令:iostat -x iotop

  • iostat -x 查看磁盤io負載

    iostat和sar屬於同一個包,安裝了sar就可使用iostat

    主要關注 %util,這個值越高說明磁盤I/O負載越高。通常大於70%說明I/O的壓力就很大了,須要進行排查是磁盤的問題仍是服務的問題。

  • iotop

    iotop監控磁盤I/O使用狀況,相似於top,能夠監測到那一個程序在佔用I/O

    安裝:

    yum -y install iotop

  1. free命令

    free命令是用來查看內存和swap的使用狀況,默認的單位是kb

    可使用-m或-g來指定單位,也可使用-h來查看

  • 詳解:

    Mem:物理內存信息

    toptal:物理內存總和

    used:已使用的內存大小

    free: 空閒內存大小

    shared: 共享內存

    buff/cache: 緩存大小。

  • buffer與cacher 的區別

    cacher:

    (數據)磁盤——>內存(cache)——>cpu

    CPU要計算時,須要把數據從磁盤中讀出來,臨時放到內存中,這部份內存就是cache。

    buffer

    (數據)cpu——>內存( buffer)——>磁盤

    數據通過CPU計算,即將要寫入磁盤,這時用的內存爲buffer。

    可用內存

    available(可用內存): buff/cache+free的總和,也就是可用內存。若是想看可用內存,關注這個便可。

    計算公式

    total=used + free + buff/cache

  1. ps命令

    ps命令是用來查看系統進程

  • ps使用兩種方式

    ps -aux 、ps -elf

    ps aux 會把系統中全部的進程給列出來,靜態的顯示出來

    ps -elf 顯示出的效果和ps aux基本相似,只不過輸出格式不一樣

  • 顯示說明,以ps -aux爲例

    顯示信息 說明
    USER 進程運行的用
    PID 進程pid。一、殺進程:kill pid。二、查看進程啓動目錄:ls -l /proc/PID
    %CPU 進程所使用cpu佔比
    %MEM 進程所使用內存佔比
    VSZ 虛擬內存
    RSS 物理內存
    TTY 運行在哪一個終端
    STAT 進程狀態
    TIME 進程運行時間
    START 進程啓動時間
    COMMAND 命令行
  • STAT進程運行狀態:

    D : 不能中斷的進程 (會影響CPU資源)

    R :run狀態的進程(正在運行的進程)

    S :sleep狀態的進程

    T :暫停的進程

    Z :殭屍進程

    字符< : 高優先級進程

    N :低優先級進程

    L :內存中被鎖了內存分頁

    s :主進程

    l :多線程進程

    字符+ :前臺進程

3、監控網絡狀態、抓包

  1. 查看網絡狀態使用netstat命令
  • 查看監聽端口

    netstat -lnp

  • 查看全部的鏈接狀態

    netstat -an

  • 只查看tcp鏈接

    netstat -ltunp

  • 查看網絡狀態小技巧

    查看全部的狀態的數字

    netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t" ,sta[key]}'

    主要關注ESTABLISHED這個值,它是網站的併發鏈接數,就是同一時間有多少個客戶端在鏈接你。若是這個值很大說明系統很繁忙,一般這個值在一千之內都是能夠接受的。

  • netstat相似的命令

    ss -an

    這命令和netstat顯示的差很少,可是它不顯示進程的名字

  1. linux下抓包

    抓包工具:tcpdump

    這個命令若是不能使用則須要安裝:yum install -y tcpdump

  • tcpdump經常使用用法:

    tcpdump -nn -i eth0

    第一個n表示顯示ip,若是不加則顯示主機名。

    第二個n表示顯示端口,不加則顯示端口服務名。

    -i表示指定網卡

    第一段:時間

    第二段:IP 源ip+端口 > 目標ip+端口

    第三段:數據包信息

  • DDos攻擊

    udp flood 利用大量UDP小包攻擊服務器,遇到這種狀況只能接入防攻擊設備。

  • 指定端口

    tcpdump -nn -i eth0 port 22

  • 排除端口

tcpdump -nn -i eth0 not port 22

  • 排除端口並指定ip

tcpdump -nn -i eth0 not port 22 and host ip地址

  • 指定數據包,並存到文件中

    tcpdump -nn -i eth0 port 22 -c 10 -w 2.cap

    -c:指定統計多少流量包

    -w:指定生成到2.cap文件中

    • .cap不能直接查看,可使用file命令查看文件信息:

    • 查看

      tcpdump -r 2.cap

      -r :表示讀取

  • tshark命令

    tshark是一個相似於tcpdump的抓包工具,它有一個實用的功能:查看指定網卡的80端口的web訪問狀況。它能夠查看外部訪問的一個信息。

    使用須要安裝:yum install -y wireshark

4、網絡相關

  1. 查看網卡ip命令:ifconfig

    ifconfig命令在centos6中是默認安裝的,centos7須要進行安裝:

    yum install -y net-tools

    若是網卡是down掉的,默認是不顯示的,若是要查看能夠加上-a

  • 關閉/啓動網卡

    有的時候修改了網卡參數須要關閉重啓

    ifdown 網卡名 :關閉網卡

    ifup 網卡名: 啓動網卡

    若是是遠程操做,網卡關閉就沒法鏈接操做了。這種狀況可使用如下方法:

    `ifdown 網卡名 && ifup 網卡名`
  • 設置虛擬網卡

    cp /etc/sysconfig/network-scripts/原網卡 虛擬網卡

    把現有的網卡複製一份,從新命名,並修改name, device, ip這三個參數。

    ifdown 網卡名 && ifup 網卡名 使用這種方法重啓便可。

  • 查看網卡鏈接狀態

    mii-tool 網卡名

  • 修改hostname

    hostnamectl set-hostname 新主機名

    須要退出登陸下生效。

  • 查看hostname

    hostname

  • DNS配置文件

    /etc/resolv.conf 若是臨時修改DNS能夠修改這個文件,可是重啓後會被網卡配置文件的內容所覆蓋。

  • hosts文件

    hosts文件windows和linux都有,用來指定域名解析ip。只能作本機使用

5、直播課

  1. tcp三次握手和四次揮手
  • 三次握手

三次握手是爲了確認客戶端跟服務器都能接受到對方的信息。

第一次握手,客戶端給服務器發包。此時服務器確認本身能夠接收客戶端的包,客戶端不確認服務器是否接收到了本身發的包。

第二次握手,服務器端回覆客戶端。 此時客戶端確認本身發的包被服務器收到,也確認本身能夠正常接收服務器包,客戶端對這次通訊沒有疑問了。服務器能夠確認本身能接收到客戶端的包,但不能確認客戶端可否接收本身發的包。

第三次握手,客戶端回覆服務器。 客戶端已經沒有疑問了,服務器也確認剛剛客戶端收到了本身的包。兩邊都沒有問題,開始通訊。

舉個例子:

好比在紅軍時代,A連和B連分在左右翼,約定在幾時幾分一同發起打擊。

這個幾時幾分的信息就須要人工經過通信員來走路傳遞。因此A連指揮官派出通信員。這是第一次。

假設通信員到達了B連,而且告知了B連指揮官幾時幾分,B連指揮官必定會讓通信員再回去通知A連指揮官,可憐的通信員只能冒着危險返回A連,由於A連指揮官看不到通信員返回的話,不知道幾時幾分這個信息到底傳達到了B連沒有。這是第二次。

如今B連指揮官開始擔憂通信員是否回到了A連,若是沒回到,B連指揮官會設身處地的想想A連指揮官見不到返回的通信員,確定是不敢打的,因此B連指揮官最盼望的是再次看到通信員出如今B連,因此A連指揮官會讓通信員再回B連一次。這是第三次。

  • 四次揮手

數據傳輸完畢後,雙方均可釋放鏈接。最開始的時候,客戶端和服務器都是處於ESTABLISHED狀態,假設客戶端主動關閉,服務器被動關閉。

第一次揮手:客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳送,也就是客戶端告訴服務器:我已經不 會再給你發數據了(固然,在fin包以前發送出去的數據,若是沒有收到對應的ack確認報文,客戶端依然會重發這些數據),可是,此時客戶端還可 以接受數據。 FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即便不攜帶數據,也要消耗一個序號。

第二次揮手:服務器收到FIN包後,發送一個ACK給對方而且帶上本身的序列號seq,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)。此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,可是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。 此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送鏈接釋放報文(在這以前還須要接受服務器發送的最後的數據)。

第三次揮手:服務器發送一個FIN,用來關閉服務器到客戶端的數據傳送,也就是告訴客戶端,個人數據也發送完了,不會再給你發數據了。因爲在半關閉狀態,服務器極可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。

第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP鏈接尚未釋放,必須通過2MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。

  • 狀態說明

    CLOSED:初始狀態,表示TCP鏈接是「關閉着的」或「未打開的」。

    LISTEN :表示服務器端的某個SOCKET處於監聽狀態,能夠接受客戶端的鏈接。

    SYN_RCVD :表示接收到了SYN報文。在正常狀況下,這個狀態是服務器端 的SOCKET在創建TCP鏈接時的三次握手會話過程當中的一箇中間狀態,很短暫,基本上用netstat很難看到這種狀態,除非故意寫一個監測程序,將三次TCP握手過程當中最後一個ACK報文不予發送。當TCP鏈接處於此狀態時,再收到客戶端的ACK報文,它就會進入到ESTABLISHED 狀態。

    SYN_SENT :這個狀態與SYN_RCVD 狀態相呼應,當客戶端SOCKET執行connect()進行鏈接時,它首先發送SYN報文,而後隨即進入到SYN_SENT 狀態,並等待服務端的發送三次握手中的第2個報文。SYN_SENT 狀態表示客戶端已發送SYN報文。

    ESTABLISHED :表示TCP鏈接已經成功創建。

    FIN_WAIT_1 :這個狀態得好好解釋一下,其實FIN_WAIT_1 和FIN_WAIT_2 兩種狀態的真正含義都是表示等待對方的FIN報文。而這兩種狀態的區別是:FIN_WAIT_1狀態其實是當SOCKET在ESTABLISHED狀態時,它想主動關閉鏈接,向對方發送了FIN報文,此時該SOCKET進入到FIN_WAIT_1 狀態。而當對方迴應ACK報文後,則進入到FIN_WAIT_2 狀態。固然在實際的正常狀況下,不管對方處於任何種狀況下,都應該立刻迴應ACK報文,因此FIN_WAIT_1 狀態通常是比較難見到的,而FIN_WAIT_2 狀態有時仍能夠用netstat看到。

    FIN_WAIT_2 :上面已經解釋了這種狀態的由來,實際上FIN_WAIT_2狀態下的SOCKET表示半鏈接,即有一方調用close()主動要求關閉鏈接。注意:FIN_WAIT_2 是沒有超時的(不像TIME_WAIT 狀態),這種狀態下若是對方不關閉(不配合完成4次揮手過程),那這個 FIN_WAIT_2 狀態將一直保持到系統重啓,愈來愈多的FIN_WAIT_2 狀態會致使內核crash。

    TIME_WAIT :表示收到了對方的FIN報文,併發送出了ACK報文。 TIME_WAIT狀態下的TCP鏈接會等待2*MSL(Max Segment Lifetime,最大分段生存期,指一個TCP報文在Internet上的最長生存時間。每一個具體的TCP協議實現都必須選擇一個肯定的MSL值,RFC 1122建議是2分鐘,但BSD傳統實現採用了30秒,Linux能夠cat /proc/sys/net/ipv4/tcp_fin_timeout看到本機的這個值),而後便可回到CLOSED 可用狀態了。若是FIN_WAIT_1狀態下,收到了對方同時帶FIN標誌和ACK標誌的報文時,能夠直接進入到TIME_WAIT狀態,而無須通過FIN_WAIT_2狀態。

    CLOSING :這種狀態在實際狀況中應該不多見,屬於一種比較罕見的例外狀態。正常狀況下,當一方發送FIN報文後,按理來講是應該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文。可是CLOSING 狀態表示一方發送FIN報文後,並無收到對方的ACK報文,反而卻也收到了對方的FIN報文。什麼狀況下會出現此種狀況呢?那就是當雙方几乎在同時close()一個SOCKET的話,就出現了雙方同時發送FIN報文的狀況,這是就會出現CLOSING 狀態,表示雙方都正在關閉SOCKET鏈接。

    CLOSE_WAIT :表示正在等待關閉。怎麼理解呢?當對方close()一個SOCKET後發送FIN報文給本身,你的系統毫無疑問地將會迴應一個ACK報文給對方,此時TCP鏈接則進入到CLOSE_WAIT狀態。接下來呢,你須要檢查本身是否還有數據要發送給對方,若是沒有的話,那你也就能夠close()這個SOCKET併發送FIN報文給對方,即關閉本身到對方這個方向的鏈接。有數據的話則看程序的策略,繼續發送或丟棄。簡單地說,當你處於CLOSE_WAIT 狀態下,須要完成的事情是等待你去關閉鏈接。

    LAST_ACK :當被動關閉的一方在發送FIN報文後,等待對方的ACK報文的時候,就處於LAST_ACK 狀態。當收到對方的ACK報文後,也就能夠進入到CLOSED 可用狀態了。


  1. ip命令使用

    ip addr add 192.168.10.10/24 dev eth0

    ip addr add 192.168.10.10/24 dev eth0

    ip addr show eth0

    ip addr del 192.168.10.10/24 dev eth0

  2. 路由相關設置

    ip route show

    ip route add default via 192.168.10.1

    ip route add 192.168.5.0/24 dev eth0

    ip route del 192.168.10.1

  • 另外用route命令來管理路由:

    (a)、網絡路由

    route add -net 192.168.1.0/24 gw 172.16.1.106

    (b)、主機路由

    route add -host 192.168.1.110 gw 172.16.1.106

    (c)、默認路由

    route add default gw 172.16.1.106

    route add -net 0.0.0.0 gw 172.16.1.106

    (d)、刪除路由

    route del -host 192.168.1.110 route del -net 192.168.1.0/24

  • 顯示網絡統計數據

    ip -s link

    ip -s -s link ls eth0

  • 中止開啓網卡

    ip link set eth0 down

    ip linke set eth0 up

    更改網卡名字

    ip link set ens37 name eth1

    永久保存:https://blog.csdn.net/jyusun/article/details/71513086

相關文章
相關標籤/搜索