從零開始緩慢深入Linux - 基礎指令篇(3)

Linux下常用性能監控指令

概述

運維的職責之一就是排查故障,而排查故障意味着我們必須要有能夠及時定位問題的能力。如果對操作系統的本身的性能狀態後知後覺,那又從何談起故障排除呢?學會使用合適的工具來監控服務器的性能狀態,就變成了對於運維而言的一個硬性的要求。這裏我們就來看一下常用的幾種查看我們性能狀態的指令。

監控CPU狀態指令

常用指令:top、atop、htop、lscpu、numactl

涉及文件:/proc/cpuinfo

運行top的時候會看到這麼一行:
%Cpu(s):  1.9 us,  1.5 sy,  0.0 ni, 96.4 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
按1則會將單個cpu的信息顯示出來:
%Cpu0  :  1.4 us,  2.1 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  1.6 us,  1.8 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
0.0 st
%Cpu4  :  11.7 us,  2.4 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  1.4 us,  2.1 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us 用戶空間佔用CPU百分比
sy 內核空間佔用CPU百分比
ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
id 空閒CPU百分比
wa 等待輸入輸出的CPU時間百分比
hi 硬件中斷
si 軟件中斷 

[root@foundation0 ~]# lscpu
Architecture:          x86_64 
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2 # 個數
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
Stepping:              3
CPU MHz:               3600.009
BogoMIPS:              7200.01
Virtualization:        VT-x
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0,1
# 通過lscpu可以看到cpu的頻率,版本,核數和緩衝等數據。

這裏可以看到幾個關鍵數據

  1. cpu的緩衝:是位於CPU與內存之間的臨時存儲器,它的容量比內存小的多但是交換速度卻比內存要快得多。主要爲了解決CPU運算速度比內存速度更快的問題,避免cpu花費很長時間等待數據寫入內存,通常這部分數據是cpu即將訪問到的數據。

    cpu緩衝分爲L1(性價比低),L2(原則越大越好)和L3(二級緩衝未命中後的一種緩衝)

  2. numa參數

    numa把一臺計算機分成多個節點(node),每個節點內部擁有多個CPU,節點內部使用共有的內存控制器,節點之間是通過互聯模塊進行連接和信息交互。因此節點的所有內存對於本節點所有的CPU都是等同的。對於其他節點中的所有CPU都不同。因此每個CPU可以訪問整個系統內存,但是訪問本地節點的內存速度最快(不經過互聯模塊),訪問非本地節點的內存速度較慢(需要經過互聯模塊),即CPU訪問內存的速度與節點的距離有關,該距離成爲Node Distance。

    假設我們當前狀態是這樣的:

    Thread(s) per core:    2                               # 每個core有2個threads  
    Core(s) per socket:    6                               # 每個socket有6個cores  
    Socket(s):             4                               # 共有4個sockets  
    NUMA node(s):          4                               # 共有4個NUMA nodes  
    NUMA node0 CPU(s):     0-5,24-29        
    NUMA node1 CPU(s):     6-11,30-35  
    NUMA node2 CPU(s):     12-17,36-41  
    NUMA node3 CPU(s):     18-23,42-47 
    

    從上表我們可以看到,numa處於開啓的狀態,並且我們的每個numa節點裏有12個cpu。打開numa容易面臨CPU節點之間內存分配不均衡的問題,因爲numa默認的內存分配策略是優先在進程所在CPU的本地內存中分配。當某個CPU節點內存不足時,會導致swap產生,而不是從遠程節點分配內存。所以像mysql之類的服務都是關閉numa模式的。

    可在bios裏面關閉numa,或者在啓動文件grub裏指定numa=off。numa狀態也可通過numactl獲取。

監控內存使用情況指令

常用指令:free,swapon,top,vmstat,sar

涉及文件:/proc/meminfo

[root@foundation0 ~]# free -m # 以M爲單位顯示內存
              total        used        free      shared  buff/cache   available
Mem:           5857        3562         301          75        1993        1940
Swap:          8064           5        8059
		      #總內存	     #已使用    #空閒內存   #多個進程  #磁盤緩存的大小 #可以使用的內存總量
		       									#共享的內存
		       									#總額

內存分成物理內存和swap,swap是以磁盤模擬空間提供給內存用的方式,故該方式會直接導致性能下降。

free和available的區別:

Free:空閒內存數,表示系統尚未使用的內存。

Available:應用程序可用內存數。系統中有些內存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的內存,這部分可回收的內存加上Free纔是系統可用的內存,是一個估計值。

buffer和cache的區別:

buffer的核心作用是用來緩衝,假設你將數據寫入磁盤,實時同步寫入會導致磁盤io消耗過大且磁盤利用率低,那可以選擇將數據先存放在buffer裏,變成異步模式,對系統的磁盤利用率和整體的性能就變高了。

cache的核心作用是緩存,旨在加快數據取用的速度。比如你做了一些運算,該計算的結果需要被反覆調用,那我們就可以將這個數據存入cache,加速數據取用的速度。

通常我們會看到write-buffer和read-cache,但並不代表buffer不可以參與讀,cache不可以參與寫。

vmstat的用法:
 vmstat [-a] [-n] [-S unit] [delay [ count]]
       vmstat [-s] [-n] [-S unit]
       vmstat [-m] [-n] [delay [ count]]
       vmstat [-d] [-n] [delay [ count]]
       vmstat [-p disk partition] [-n] [delay [ count]]
       vmstat [-f]
       vmstat [-V]
      
舉例:
[root@Foundation0 ~]# vmstat -a 2 10 # 開啓顯示active/inactive memory,每兩秒輸出一條信息,共輸出10條
[root@Foundation0 ~]# vmstat -s # 顯示各種事件計數器表和內存統計信息
[root@Foundation0 ~]# vmstat -w 2 3 # 顯示buffer cache等內存信息

內存溢出和內存泄漏

內存溢出 out of memory:
是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;

內存泄露 memory leak:
是指程序在申請內存後,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被佔光。

OOM問題

OOM(out of memory)問題爲程序申請內存過大,而實際內存無法滿足需求,於是將程序kill掉的操作。主要原因和linux的overcommit機制有關,很多時候我們會發現,實際使用內存和預設內存並不會統一,而overcommit就能夠節省我們的內存資源,所謂overcommit,其實就是操作系統承諾分配給進程的總內存大小超過了其物理可實際可用的內存。比如有個進程申請了1G的內存,而在運行過程的其他大部分時間裏只用了100M的內存。這樣其實有900多M的內存在大部分時間裏是閒置的,完全可以分給其他進程,overcommit的機制就能充分利用這些閒置的內存。

有些時候,我們會在日誌中看到oom相關的信息,如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7Fm0LT2a-1572853240004)(pic/oom.jpg)]

配置文件:/proc/$PID/oom_adj 、/proc/$PID/oom_score、/proc/$PID/oom_score_adj

配置文件說明:
/proc/$PID/oom_adj  權值-16至15,默認是0,設置爲-17表示永遠不被kill,其餘情況值越大越容易被kill
/proc/$PID/oom_score   記錄由系統算出來的每個進程的最終的分值,內核調用中的oom_badness() 給每個進程打分,根據分值的高低來決定殺哪個進程,這個分值可以根據oom_adj自動調節,分值越小越不容易被kill。默認情況下最bad的那個進程就是那個最佔用內存的進程。
/proc/$PID/oom_score_adj   從Linux 2.6.36開始都安裝了/proc/$PID/oom_score_adj,此後將替換爲/proc/$PID/oom_adj

Swap的使用

配置文件:/proc/sys/vm/swappiness

低參數值會讓內核儘量少用交換,更高參數值會使內核更多的去使用交換空間。默認值爲60(當剩餘物理內存低於40%(40=100-60)時,開始使用交換空間)。

vi /etc/sysctl.conf
vm.swappiness = [0 or 1]
For kernels > 2.6.32-303.* the swappiness value have to be 1 - newer kernels
For kernels < 2.6.32-303.* the swappiness value have to be 0 - older kernels

監控IO狀態

關鍵指標:

  • iops:是指每秒產生的磁盤讀寫次數
  • 吞吐量:是指每秒能從磁盤讀出或寫入的數據量
  • 解釋:iops高代表每秒可以支持的讀寫次數多,但每次讀寫的數據量可能不一定很大,比如每次幾k字節,所以吞吐量不見得大。吞吐量高的含義爲可能每秒支持的io次數不多,但每次可以讀很大的一塊數據,因此總吞吐量大。所以具體用哪一種,就要看你的數據讀寫的特徵,如果是小數據的頻繁讀寫,就應該選高iops,如果是大量數據的非頻繁讀寫,就選大吞吐。

常用指令iostat,iotop,vmstat,sar,df、hdparm

測試寫性能:dd

測試讀性能:hdparm

df舉例:

[root@foundation0 ~]# df -h # 用以查看磁盤利用率
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       113G   48G   65G  43% /
devtmpfs        2.9G     0  2.9G   0% /dev
tmpfs           2.9G  156K  2.9G   1% /dev/shm
tmpfs           2.9G   73M  2.8G   3% /run
tmpfs           2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/loop2      3.7G  3.7G     0 100% /content/rhel7.1/x86_64/dvd
/dev/loop0      3.6G  3.6G     0 100% /content/rhel6.5/x86_64/dvd
/dev/loop3      3.5G  3.5G     0 100% /content/rhel7.0/x86_64/dvd
/dev/loop1      3.8G  3.8G     0 100% /content/rhel7.2/x86_64/dvd
tmpfs           586M   16K  586M   1% /run/user/1000
tmpfs           586M     0  586M   0% /run/user/0

iostat舉例(用以查看io性能指標):

[root@Foundation0 ~]# iostat -d -k 1 5
 # 參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block爲單位的列強制使用Kilobytes爲單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示5次
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.84         1.03        25.26    1878696   46020446

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         8.00         0.00          8          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合併爲“一次I/O請求”。“一次傳輸”請求的大小是未知的。

kB_read/s:每秒從設備(drive expressed)讀取的數據量;
kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;
kB_read:讀取的總數據量;
kB_wrtn:寫入的總數量數據量;
這些單位都爲Kilobytes。

[root@foundation0 ~]#  iostat -x 1 3 # -x顯示更多信息
Linux 3.10.0-327.el7.x86_64 (foundation0.ilt.example.com) 	01/29/2018 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.62    0.00    0.15    0.02    0.00   99.21

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.02    0.01    1.83     1.03    25.26    28.51     0.01    3.21   32.44    2.99   0.29   0.05

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.02    0.00    0.51    0.00    0.00   98.47

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.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.04    0.00    0.52    0.00    0.00   98.45

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.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00



rrqm/s:  每秒進行 merge 的讀操作數目。即 delta(rmerge)/s
wrqm/s:  每秒進行 merge 的寫操作數目。即 delta(wmerge)/s
r/s:     每秒完成的讀 I/O 設備次數。即 delta(rio)/s
w/s:     每秒完成的寫 I/O 設備次數。即 delta(wio)/s
rsec/s:  每秒讀扇區數。即 delta(rsect)/s
wsec/s:  每秒寫扇區數。即 delta(wsect)/s
rkB/s:   每秒讀K字節數。是 rsect/s 的一半,因爲每扇區大小爲512字節。(需要計算)
wkB/s:   每秒寫K字節數。是 wsect/s 的一半。(需要計算)
avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因爲aveq的單位爲毫秒)。
await:   平均每次設備I/O操作的等待時間(毫秒)。即 delta(ruse+wuse)/delta(rio+wio),一般地系統IO響應時間應該低於5ms。
svctm:   平均每次設備I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util:   一秒中有百分之多少的時間用於I/O操作,或者說一秒中有多少時間I/O隊列是非空的。即 delta(use)/s/1000 (因爲use的單位爲毫秒)

vmstat舉例(同上):

[root@foundation0 ~]# vmstat -p sda1 2 3
sda1          reads   read sectors  writes    requested writes
               24356    3753409    3335673   92044013
               24356    3753409    3335674   92044021
               24356    3753409    3335674   92044021

sar舉例(比較通用的指令):

sar [options] [-A] [-o file] t [n]

-A:所有報告的總和。
-u:CPU利用率
-v:進程、I節點、文件和鎖表狀態。
-d:硬盤使用報告。
-r:內存和交換空間的使用統計。
-g:串口I/O的情況。
-b:緩衝區使用情況。
-a:文件讀寫情況。
-c:系統調用情況。
-q:報告隊列長度和系統平均負載
-R:進程的活動情況。
-y:終端設備活動情況。
-w:系統交換活動。
-x { pid | SELF | ALL }:報告指定進程ID的統計信息,SELF關鍵字是sar進程本身的統計,ALL關鍵字是所有系統進程的統計。

hdparm舉例:

[root@www ~]# hdparm -Tt /dev/vda

/dev/vda:
 Timing cached reads:   9416 MB in  1.98 seconds = 4753.62 MB/sec
 Timing buffered disk reads: 162 MB in  3.02 seconds =  53.68 MB/sec
 
 # Buffer主要用於輸入/輸出過程,而Cache則用於從磁盤讀取和寫入進程。
 # 關注Timing cached reads該數據

監控網絡狀態

常用指令ping,tracepath,traceroute,netstat,nslookup,ifconfig,tcpdump,iptraf,ip,tcping addr,iperf3,arp

測速:iperf3、ping

測端口連接質量:tcping

tracepath和traceroute用法:

[root@foundation0 ~]# tracepath www.baidu.com # 可用以檢測網絡鏈路延遲在哪兒 
 1?: [LOCALHOST]                                         pmtu 1500
 1:  SQNRJH2RAIH99ZW.mshome.net                            0.178ms 
 1:  SQNRJH2RAIH99ZW.mshome.net                            0.235ms 
 2:  192.168.1.1                                           0.671ms asymm  1 
 3:  192.168.1.1                                           0.650ms pmtu 1492
 3:  1.196.78.124.broad.xw.sh.dynamic.163data.com.cn       5.718ms asymm  2 
 4:  61.152.1.157                                          8.197ms asymm  3 
 5:  101.95.120.158                                        8.653ms asymm  4 
 6:  no reply
 7:  220.191.200.142                                      11.967ms asymm  6  
 8:  no reply
 9:  115.239.209.46                                        8.084ms asymm  8 
10:  no reply
11:  no reply
[root@foundation0 ~]# traceroute -n -q 4 www.baidu.com # 追蹤路由,向每個網關發送4個數據包
traceroute to www.baidu.com (115.239.210.27), 30 hops max, 60 byte packets
 1  192.168.137.1  0.153 ms * *
 2  192.168.1.1  0.524 ms  0.447 ms  0.536 ms
 3  124.78.196.1  1.863 ms  6.880 ms  7.373 ms
 4  61.152.0.157  3.480 ms 61.152.1.153  6.867 ms  6.824 ms
 5  101.95.120.106  4.874 ms  5.018 ms  4.914 ms
 6  202.97.82.2  6.089 ms  5.645 ms 202.97.26.10  7.099 ms
 7  220.191.200.26  7.412 ms 220.191.200.38  6.748 ms 220.191.200.30  5.562 ms
 8  * * *
 9  115.239.209.42  7.654 ms 115.239.209.38  6.827 ms  7.156 ms
10  * * *
11  * * *

netstat用法:

列出所有端口 (包括監聽和未監聽的)
netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口                             

列出所有處於監聽狀態的 Sockets
netstat -l        #只顯示監聽端口
netstat -lt       #只列出所有監聽 tcp 端口
netstat -lu       #只列出所有監聽 udp 端口
netstat -lx       #只列出所有監聽 UNIX 端口

顯示每個協議的統計信息
netstat -s  	  #顯示所有端口的統計信息
netstat -st 	  #顯示TCP端口的統計信息
netstat -su   	  #顯示UDP端口的統計信息

在netstat輸出中顯示 PID 和進程名稱
netstat -p   	  #可以與其它選項一起使用,就可以添加“PID/進程名稱”到netstat輸出中,這樣debugging的時候可以很方便的發現特定端口運行的程序。

在netstat輸出中不顯示主機,端口和用戶名(host, port or user)
netstat -n 		  #當你不想讓主機,端口和用戶名顯示,-n將會使用數字代替那些名稱。同樣可以加速輸出,因爲不用進行比對查詢。
netstat -an

如果只是不想讓這三個名稱中的一個被顯示,使用以下命令:
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users

持續輸出netstat信息
netstat -c   #每隔一秒輸出網絡信息

顯示系統不支持的地址族(Address Families)
netstat --verbose
在輸出的末尾,會有如下的信息:
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

顯示核心路由信息
netstat -r	  # 使用netstat -rn顯示數字格式,不查詢主機名稱。

找出程序運行的端口
netstat -ap | grep ssh

找出運行在指定端口的進程:
netstat -an | grep ':80'

顯示網絡接口列表
netstat -i

顯示詳細信息:
netstat -ie。

應用舉例:
查看連接某服務端口最多的的IP地址:
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr

TCP各種狀態列表:
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'

查看php進程數,如果接近預設值,說明不夠用,需要增加:
netstat -anpo | grep "php" | wc -l

查看tcp的併發請求數與其TCP連接狀態:
netstat -n | awk '/^tcp/ {++I[$NF]} END {for(a in I) print a, I[a]}' 
LAST_ACK 5   (正在等待處理的請求數) 
SYN_RECV 30 
ESTABLISHED 1597 (正常數據傳輸狀態) 
FIN_WAIT1 51 
FIN_WAIT2 504 
TIME_WAIT 1057 (處理完畢,等待超時結束的請求數) 
 
狀態:描述 
CLOSED:無連接是活動的或正在進行 
LISTEN:服務器在等待進入呼叫 
SYN_RECV:一個連接請求已經到達,等待確認 
SYN_SENT:應用已經開始,打開一個連接 
ESTABLISHED:正常數據傳輸狀態 
FIN_WAIT1:應用說它已經完成 
FIN_WAIT2:另一邊已同意釋放 
ITMED_WAIT:等待所有分組死掉 
CLOSING:兩邊同時嘗試關閉 
TIME_WAIT:另一邊已初始化一個釋放 
LAST_ACK:等待所有分組死掉

tcpdump的用法:

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]
        
抓包選項:
-c:指定要抓取的包數量。注意,是最終要獲取這麼多個包。例如,指定"-c 10"將獲取10個包,但可能已經處理了100個包,只不過只有10個包是滿足條件的包。
-i interface:指定tcpdump需要監聽的接口。若未指定該選項,將從系統接口列表中搜尋編號最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一個符合條件的接口,搜尋馬上結束。可以使用'any'關鍵字表示所有網絡接口。
-n:對地址以數字方式顯式,否則顯式爲主機名,也就是說-n選項不做主機名解析。
-nn:除了-n的作用外,還把端口顯示爲數值,否則顯示端口服務名。
-N:不打印出host的域名部分。例如tcpdump將會打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入還是流出的包。可以給定的值爲"in""out""inout",默認爲"inout"。
-s len:設置tcpdump的數據包抓取長度爲len,如果不設置默認將會是65535字節。對於要抓取的數據包較大時,長度設置不夠可能會產生包截斷,若出現包截斷,
      :輸出行中會出現"[|proto]"的標誌(proto實際會顯示爲協議名)。但是抓取len越長,包的處理時間越長,並且會減少tcpdump可緩存的數據包的數量,
      :從而會導致數據包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。

輸出選項:
-e:輸出的每行中都將包括數據鏈路層頭部信息,例如源MAC和目標MAC。
-q:快速打印輸出。即打印很少的協議相關信息,從而輸出行都比較簡短。
-X:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出。
-XX:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出,更詳細。
-v:當分析和打印的時候,產生詳細的輸出。
-vv:產生比-v更詳細的輸出。
-vvv:產生比-vv更詳細的輸出。

其他功能性選項:
-D:列出可用於抓包的接口。將會列出接口的數值編號和接口名,它們都可以用於"-i"後。
-F:從文件中讀取抓包的表達式。若使用該選項,則命令行中給定的其他表達式都將失效。
-w:將抓包數據輸出到文件中而不是標準輸出。可以同時配合"-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進行分析和打印。
-r:從給定的數據包文件中讀取數據。使用"-"表示從標準輸入中讀取。

應用舉例:
tcpdump -c 5 -nn -i eth0 icmp  #抓取ping包,抓取5個包
tcpdump tcp port 22 #監控本地tcp22號端口
 tcpdump -c 10 -nn -i eth0 tcp dst port 22   #抓目標地址是本地eth0的22號口的包10個
 

iptraf用法:

el6中叫做iptraf
el7中叫做iptraf-ng
直接回車圖形化查看即可  建議configure裏單位選擇爲kbytes  默認kbits  1byte=8bits

iperf3用法:

iperf通常用來進行網絡測速,分爲客戶端和服務端

  • 服務端,執行以下指令後會打開5201端口:
iperf3 -s
  • 客戶端,執行以下指令連接服務端測速:
iperf3 -c $IP -t 30 -P 30
# -t 超時時間  -P 連接數,一個線程一個連接。一般30個比較好。超時時間用30比較好。因爲通常路由上的qos會有限制。
# 命令執行完的顯示結果:
[SUM]   0.00-30.00  sec  69.7 MBytes  19.5 Mbits/sec  2964             sender
[SUM]   0.00-30.00  sec  67.7 MBytes  18.9 Mbits/sec                  receiver

# 速度計算方法:
計算(sender+receiver)/2

arping用法:

用法1:查看某個IP的MAC地址
arping 192.168.131.155

用法2:查看某個IP的MAC地址,並指定count數量
arping -c 1 192.168.131.155

用法3:當有多塊網卡的時候,指定特定的設備來發送請求包
arping -i eth1 -c 1 192.168.131.155

用法4:查看某個IP是否被不同的MAC佔用
arping -d 192.168.131.155

用法5:查看某個MAC地址的IP,要在同一子網才查得到
arping -c 1 52:54:00:a1:31:89

用法6:確定MAC和IP的對應,確定指定的網卡綁定了指定的IP
arping -c 1  -T 192.168.131.156  00:13:72:f9:ca:60

用法7:確定IP和MAC對應,確定指定IP綁在了指定的網卡上
arping -c 1  -t  00:13:72:f9:ca:60 192.168.131.156
 
用法8:有時候,本地查不到某主機,可以通過讓網關或別的機器去查。以下幾種形式測了下都可以
arping -c 1  -S 10.240.160.1 -s 88:5a:92:12:c1:c1  10.240.162.115
arping -c 1  -S 10.240.160.1 10.240.162.115

監控用戶行爲活動

常用指令:ac,who,last,lastb,lastlog,w

涉及文件:~/.bash_history

ac的用法:

# ac命令主要用於統計用戶連接時間情況
常用選項:
	-d將顯示每天的連接時間。
	-p將顯示每個用戶的連接時間。
舉例:
[root@foundation0 ~]# ac -d -p
	kiosk                                0.17
Jul 23	total        0.17
	kiosk                                0.26
Jul 23	total        0.26
	kiosk                                8.60
Jul 23	total        8.60
	kiosk                                0.01
Jul 24	total        0.01
	kiosk                                8.04
Aug 24	total        8.04
	kiosk                               14.20

last、lastb及lastlog用法

# last 顯示所有登錄(和登出)的用戶信息。
[root@foundation0 ~]# last
kiosk    pts/5        :0               Mon Jan 29 19:38 - 19:43  (00:05)    
kiosk    pts/4        :0               Thu Jan 11 19:19   still logged in   
kiosk    pts/1        :0               Mon Jan  8 18:37   still logged in   
kiosk    :0           :0               Mon Jan  8 18:36   still logged in   

# lastb 顯示登錄出錯的用戶信息
[root@foundation0 ~]# lastb
root     ssh:notty    172.25.0.10      Tue Jan 30 19:54 - 19:54  (00:00)    

# lastlog命令用於顯示系統中所有用戶最近一次登錄信息。
	-b<天數>:顯示指定天數前的登錄信息;
	-h:顯示召集令的幫助信息;
	-t<天數>:顯示指定天數以來的登錄信息;
	-u<用戶名>:顯示指定用戶的最近登錄信息。
[root@foundation0 ~]# lastlog
Username         Port     From             Latest
root             pts/4                     Thu Jan 11 19:19:24 +0800 2018
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
....

實戰:構建atop日誌進行性能實時記錄

1) 安裝atop工具

[root@www ~]# yum -y install atop

2) 查看atop的輸出項

[root@www ~]# atop
ATOP - www     2019/03/19  18:41:46     --------------      23d22h39m42s elapsed
PRC | sys   78m14s | user   1h49m | #proc    120 | #zombie    0 | no  procacct |
CPU | sys	0% | user      0% | irq       0% | idle     99% | wait      0% |
CPL | avg1    0.19 | avg5    0.12 | avg15   0.08 | csw 652003e3 | intr 47535e4 |
MEM | tot   992.3M | free   82.4M | cache 242.6M | buff    6.1M | slab   46.5M |
SWP | tot     0.0M | free    0.0M |              | vmcom   1.6G | vmlim 496.2M |
PAG | scan 4458445 | steal 4266e3 | stall     77 | swin       0 | swout      0 |
DSK |          vda | busy      0% | read  330920 | write 1168e4 | avio 0.37 ms |
DSK |          vdb | busy      0% | read     287 | write     11 | avio 1.32 ms |
NET | transport    | tcpi 2400065 | tcpo 2523116 | udpi   37376 | udpo   71728 |
NET | network	   | ipi  2438817 | ipo  2482402 | ipfrw      0 | deliv 2439e3 |
NET | eth0    ---- | pcki  579098 | pcko  587804 | si    0 Kbps | so    2 Kbps |
NET | lo      ---- | pcki 1896452 | pcko 1896452 | si    0 Kbps | so    0 Kbps |
                 *** system and process activity since boot ***
  PID SYSCPU USRCPU  VGROW  RGROW  RDDSK  WRDSK  THR S CPUNR  CPU CMD       1/12
  839 40m00s 54m58s 132.1M 10864K 404.1M 12700K   19 S     0   0% AliYunDun
  332 11m17s  9m00s 203.3M  2956K 946.3M  37.9G    1 S     0   0% systemd-journa
 1016  6m15s  8m58s  1540K   212K  1236K     0K    1 S     0   0% aliyun-service
 1433  3m09s 10m06s   1.1G 336.8M 296.9M  24.6G   57 S     0   0% mysqld
  779  4m07s  4m45s 32748K  2696K 11624K   408K    4 S     0   0% AliYunDunUpdat
  831  3m00s  3m06s 473.5M  3928K 16692K    12K    4 S     0   0% vpnagentd
  441 99.32s  3m43s 704.7M  6724K   4.2G   3.5G    3 S     0   0% rsyslogd
  907  1m56s  1m56s 274.6M  4436K 34548K  2932K    5 S     0   0% acnvmagent
  690 23.96s  2m44s 549.3M 14336K  2900K    16K    5 S     0   0% tuned
    9 85.14s  0.00s     0K     0K     0K     0K    1 R     0   0% rcu_sched


# 按c可進入命令視圖
ATOP - www        2019/03/19  18:42:36        --------------         10s elapsed
PRC | sys    0.09s | user   0.39s | #proc    120 | #zombie    0 | no  procacct |
CPU | sys	1% | user      4% | irq       0% | idle     94% | wait      1% |
CPL | avg1    0.08 | avg5    0.10 | avg15   0.08 | csw     5288 | intr    4190 |
MEM | tot   992.3M | free   66.0M | cache 258.6M | buff    7.3M | slab   46.7M |
SWP | tot     0.0M | free    0.0M |              | vmcom   1.6G | vmlim 496.2M |
DSK |          vda | busy      1% | read      27 | write    268 | avio 0.39 ms |
NET | transport    | tcpi     163 | tcpo     243 | udpi       0 | udpo       0 |
NET | network      | ipi      163 | ipo      185 | ipfrw      0 | deliv    163 |
NET | eth0    ---- | pcki      53 | pcko      75 | si    6 Kbps | so  137 Kbps |
NET | lo      ---- | pcki     110 | pcko     110 | si   16 Kbps | so   16 Kbps |

  PID   TID S  CPU COMMAND-LINE (horizontal scroll with <- and -> keys)      1/3
 8398     - S   1% php-fpm: pool www
19642     - S   1% php-fpm: pool www
 8397     - S   1% php-fpm: pool www
 9149     - S   1% php-fpm: pool www
 8396     - S   1% php-fpm: pool www
 1433     - S   0% /opt/mysql/bin/mysqld --datadir=/var/lib/mysql --pid-file=/va
  839     - S   0% /usr/local/aegis/aegis_client/aegis_10_59/AliYunDun
23027     - R   0% atop
19958     - S   0% goaccess -f /var/log/nginx/zabbix.log -o /usr/share/nginx/htm
  831     - S   0% /opt/cisco/anyconnect/bin/vpnagentd
20498     - S   0% /usr/sbin/zabbix_server: history syncer #1 [processed 1 value
20495     - S   0% /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.0

3)配置atop日誌

[root@www cron.d]# cat /etc/cron.d/atop
# daily restart of atop at midnight
0 0 * * * root systemctl try-restart atop

4)查看日誌

atop -r atop_20190305 -b 13:00 -e 17:00 
按t下翻頁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章