7-2 10 io性能 free ps 網絡狀態 抓包

七週二次課(7月11日)

10.6 監控io性能html

10.7 free命令linux

10.8 ps命令ios

10.9 查看網絡狀態web

10.10 linux下抓包緩存

擴展tcp三次握手四次揮手 http://www.doc88.com/p-9913773324388.html服務器

tshark幾個用法:http://www.aminglinux.com/bbs/thread-995-1-1.html網絡

10.6 監控io性能

iostat和sar屬於同一個軟件包,命令被用於監視系統輸入輸出設備和CPU的使用狀況。它的特色是彙報磁盤活動統計狀況,同時也會彙報出CPU使用狀況。同vmstat同樣,iostat也有一個弱點,就是它不能對某個進程進行深刻分析,僅對系統的總體狀況進行分析。多線程

iostat -x 查看磁盤壓力

[root@adai003 ~]# iostat -x
Linux 3.10.0-514.el7.x86_64 (adai003) 	2017年07月11日 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.12    0.00    0.24    0.25    0.00   99.39

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.06    0.45    0.30    16.50     4.06    54.39     0.02   31.35   32.52   29.60   6.25   0.47
scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00  170.45  170.45    0.00 170.45   0.01

說明: util%:表示io等待佔比,正常狀況下該值和磁盤讀寫(r/w)成正比,若是該值很大,讀寫數值很小則說明磁盤存在問題,系統性能會受影響!併發

iotop 查看磁盤使用

iotop命令是一個用來監視磁盤I/O使用情況的top類工具(動態)。iotop具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息。Linux下的IO統計工具如iostat,nmon等大多數是隻能統計到設備的讀寫狀況,若是你想知道每一個進程是如何使用IO的就比較麻煩,使用iotop命令能夠很方便的查看。dom

[root@axiang ~]# iotop

Total DISK READ :	0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:	0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND          
 2342 be/4 root        0.00 B/s    0.00 B/s  0.00 %  1.00 % [kworker/0:1]
  512 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd-logind
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd -~rialize 21
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

...
  • iotop經常使用快捷鍵

    • 左右箭頭:改變排序方式,默認是按IO排序
    • r:改變排序順序。
    • o:只顯示有IO輸出的進程。
    • p:進程/線程的顯示方式的切換。
    • a:顯示累積使用量。
    • q:退出。

10.7 free命令

free命令能夠顯示當前系統未使用的和已使用的內存數目,還能夠顯示被內核使用的內存緩衝區。

經常使用選項:

  • -b/k/m/g:分別以byte、KB、M、G爲單位顯示(默認以KB爲單位)
  • -h:已適當的單位顯示
  • -t:顯示內存總和
[root@axiang-02 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        577M        918M        8.6M        335M        1.1G
Swap:          2.0G          0B        2.0G

  • 可用available=空閒free+緩衝、緩存

  • 內存總大小total=已用used+可用available

  • buff緩衝和cache緩存區別,所指流向不一樣

    • 磁盤數據——>內存(cache)——>cpu //cache給cpu
    • cpu數據——>內存(buff)——>磁盤 //

若是佔用swap表明內存不夠或者程序致使內存泄漏,須要排查或添加內存

10.8 PS命令

ps命令用於報告當前系統的進程狀態。能夠搭配kill指令隨時中斷、刪除沒必要要的程序。ps命令是最基本同時也是很是強大的進程查看命令,使用該命令能夠肯定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等,總之大部分信息都是能夠經過執行該命令獲得的。

常見用法

  • ps aux | grep xxx
  • ps aux //列出系統所有進程
[root@adai003 ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 125100  3628 ?        Ss   10:28   0:01 /usr/lib/systemd/systemd 
root         2  0.0  0.0      0     0 ?        S    10:28   0:00 [kthreadd]
……
  • S列表明進程類型
    • D:不能中斷的進程
    • R:run狀態的進程 (時間段內在使用CPU)
    • S:sleep狀態的進程 (短暫運行的進程,如vmstat)
    • s:主進程
    • T:暫停的進程
    • Z:殭屍進程
    • <:高優先級進程
    • N:低優先級進程
    • L:內存中被鎖定了內存分頁
    • l:多線程進程
    • +:前臺進程

[root@axiang ~]# ps aux | grep vmstat
root      2430  0.1  0.1 148308  1344 pts/0    T    17:30   0:00 vmstat 1
root      2432  0.0  0.0 112664   976 pts/0    S+   17:30   0:00 grep --color=auto vmstat

進程/線程

  • 進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。 運行中的進程可能具備如下三種基本狀態:

    • 就緒狀態(Ready):進程已得到除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執行。就緒進程能夠按多個優先級來劃分隊列。例如,當一個進程因爲時間片用完而進入就緒狀態時,排入低優先級隊列;當進程由I/O操做完成而進入就緒狀態時,排入高優先級隊列。
    • 運行狀態(Running):進程佔用處理器資源;處於此狀態的進程的數目小於等於處理器的數目。在沒有其餘進程能夠執行時(如全部進程都在阻塞狀態),一般會自動執行系統的空閒進程。
    • 阻塞狀態(Blocked):因爲進程等待某種條件(如I/O操做或進程同步),在條件知足以前沒法繼續執行。該事件發生前即便把處理機分配給該進程,也沒法運行。
  • 線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程本身不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。一個線程能夠建立和撤消另外一個線程,同一進程中的多個線程之間能夠併發執行。因爲線程之間的相互制約,導致線程在運行中呈現出間斷性。線程也有就緒、阻塞和運行三種基本狀態。每個程序都至少有一個線程,若程序只有一個線程,那就是程序自己。

  • 在單個程序中同時運行多個線程完成不一樣的工做,稱爲多線程

    • 用戶級線程:管理過程所有由用戶程序完成,操做系統內核心只對進程進行管理。
    • 系統級線程(核心級線程):由操做系統內核進行管理。操做系統內核給應用程序提供相應的系統調用和應用程序接口API,以使用戶程序能夠建立、執行、撤消線程。

進程和線程關係:

mark

10.9 查看網絡狀態

netstat命令

netstat命令用來查看服務在網絡上的通訊狀態,端口

常見用法

  • netstat -lnp 查看監聽端口,
    • 包含unix的socket,socket爲同一臺服務器進程間的通訊設置
    • 22遠程端口,25郵件端口
  • netstat -lntp 只看tcp協議鏈接
  • netstat -an 查看tcp/ip網絡鏈接情況
    • TIME_WAIT 表示等待下次鏈接
[root@axiang ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      921/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1385/master         
tcp6       0      0 :::22                   :::*                    LISTEN      921/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1385/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           517/chronyd         
udp6       0      0 ::1:323                 :::*                                517/chronyd         
raw6       0      0 :::58                   :::*                    7           558/NetworkManager  
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     17374    1385/master          private/lmtp
unix  2      [ ACC ]     STREAM     LISTENING     17377    1385/master          private/anvil

:proto爲unix的是系統內的socket文件。
...
[root@axiang ~]# netstat -an | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0     52 192.168.83.131:22       192.168.83.1:49690      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
udp        0      0 192.168.83.131:36558    61.216.153.107:123      ESTABLISHED
udp        0      0 192.168.83.131:55028    85.199.214.100:123      ESTABLISHED
...
  • 查看鏈接數
[root@axiang ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 	 4
ESTABLISHED 	 1  //併發數,直接影響服務器資源使用狀況
  • ESTABLISHED 說明併發鏈接數,客戶端——服務器

ss命令

ss命令用來顯示處於活動狀態的套接字信息。ss命令能夠用來獲取socket統計信息,它能夠顯示和netstat相似的內容。但ss的優點在於它可以顯示更多更詳細的有關TCP和鏈接狀態的信息,並且比netstat更快速更高效,缺點是不會顯示進程的名稱。

[root@axiang ~]# ss -an
Netid State      Recv-Q Send-Q                                    Local Address:Port                                                   Peer Address:Port              
nl    UNCONN     0      0                                                     0:-192937426                                                         *                   
nl    UNCONN     0      0                                                     0:0                                                                  *                   
nl    UNCONN     0      0                                                     0:-192937426                                                         *
  • ss -an也能夠查看,可是不顯示進程名字

10.10 linux下抓包

tcpdump命令

tcpdump命令是一款sniffer工具,它能夠打印全部通過網絡接口的數據包的頭信息,也可使用-w選項將數據包保存到文件中,方便之後分析。

常見用法

  • tcpdump -nn -i ens33 //第一個n表示以數字形式顯示IP,若是不加該選項會顯示成主機名
  • tcpdump -nn ens33 not port 22 //指定端口爲非22的
  • tcpdump -nn ens33 port 22 and host 192.168.8.1 //指定多個條件 and
  • tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap //指定抓包數量和存放位置
  • tip
    • 若是面對DDos攻擊,須要接入專業防攻擊設備或服務
    • .cap是實際通訊數據
[root@axiang ~]# tcpdump -nn -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
21:12:01.388269 IP 192.168.83.131.22 > 192.168.83.1.49690: Flags [P.], seq 339706
21:12:01.406543 IP 192.168.83.1.49690 > 192.168.83.131.22: Flags [.], ack 212, wi

查看1.cap文件信息:

  • .cap內容沒法使用cat命令查看,可以使用tcpdump -r命令查看
[root@axiang-02 ~]# tcpdump -nn -i ens33 -c 5 -w /tmp/1.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[root@axiang-02 ~]# tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
12:45:38.564652 IP axiang-02.ssh > 192.168.83.1.50036: Flags [P.], seq 406420592:406420740, ack 1872774135, win 294, length 148
12:45:38.565089 IP 192.168.83.1.50036 > axiang-02.ssh: Flags [.], ack 148, win 254, length 0
12:45:40.715007 IP axiang-02.41813 > 61-216-153-105.HINET-IP.hinet.net.ntp: NTPv4, Client, length 48
12:45:44.496768 IP 192.168.83.1.50036 > axiang-02.ssh: Flags [P.], seq 1:53, ack 148, win 254, length 52
12:45:44.540043 IP axiang-02.ssh > 192.168.83.1.50036: Flags [.], ack 53, win 294, length 0

tshark命令

[root@axiang-02 ~]# yum install -y wireshark

常見用法

  • 查看指定網卡80端口的1個web服務的訪問狀況(相似於web的訪問日誌):
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"

相關文章
相關標籤/搜索