首頁 > 軟體

Linux 效能監控之命令列工具

2020-06-16 17:40:08

引言
      對於系統和網路管理員來說每天監控和偵錯Linux系統的效能問題是一項繁重的工作。這些命令列工具可以在各種Linux系統下使用,可以用於監控和查詢產生效能問題的原因。這個命令列工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。

1. lsof - 列出開啟的檔案

      在許多Linux或者類Unix系統裡都有lsof命令,它常用於以列表的形式顯示所有開啟的檔案和進程。開啟的檔案包括磁碟檔案、網路通訊端、管道、裝置和進程。使用這條命令的主要情形之一就是在無法掛載磁碟和顯示正在使用或者開啟某個檔案的錯誤資訊的時候。
常用的參數列:
lsof filename 顯示開啟指定檔案的所有進程
lsof -a 表示兩個引數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字元的進程所有開啟的檔案
lsof -u username 顯示所屬user進程開啟的檔案
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程開啟的檔案
lsof +D /DIR/ 同上,但是會搜尋目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定檔案描述符的進程
lsof -n 不將IP轉換為hostname,預設是不加上-n引數
lsof -i 用以顯示符合條件的進程情況

檢視22埠現在執行的情況

[root@CentOS7 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 925 root 3u IPv4 18374 0t0 TCP *:ssh (LISTEN)
sshd 925 root 4u IPv6 18383 0t0 TCP *:ssh (LISTEN)
sshd 9452 root 3u IPv4 1169003 0t0 TCP CentOS7.2:ssh->192.168.56.1:61347 (ESTABLISHED)

檢視所屬root使用者進程所開啟的檔案型別為txt的檔案

[root@CentOS7 ~]# lsof -a -u root -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root txt REG 0,34 1489960 56083 /usr/lib/systemd/systemd
kthreadd 2 root txt unknown /proc/2/exe
ksoftirqd 3 root txt unknown /proc/3/exe
migration 7 root txt unknown /proc/7/exe
rcu_bh 8 root txt unknown /proc/8/exe

2. top - 進程活動

      top提供一個當前執行系統實時動態的檢視,也就是正在執行進程。在預設情況下,顯示系統中CPU使用率最高的任務,並每5秒鐘重新整理一次。

常用熱鍵

t:顯示摘要資訊開關

top - 11:20:12 up 2 days, 18:39, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3/0.7 1[| ]
KiB Mem : 500780 total, 13236 free, 249296 used, 238248 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200108 avail Mem
 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17166 root 20 0 0 0 0 S 0.3 0.0 0:09.05 kworker/0:2
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:02.25 top
23944 root 20 0 1239128 38724 8388 S 0.3 7.7 6:39.63 firefox
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.22 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:11.69 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 6:09.07 rcu_sched
11 root 20 0 0 0 0 S 0.0 0.0 14:11.36 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:03.03 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf

 m:顯示記憶體資訊開關

top - 11:22:12 up 2 days, 18:41, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 60.0/500780 [|||||||||||||||||||||||||||||||||||||||||||||| ]
KiB Swap: 6.4/8388604 [||||| ]

 A:分類顯示系統不同資源的使用大戶,有助於快速識別系統中資源消耗多的任務

1:Def - 11:23:40 up 2 days, 18:42, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 500780 total, 21124 free, 249376 used, 230280 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200072 avail Mem
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
920 root 20 0 644044 11096 3360 S 0.3 2.2 10:28.34 daomonit
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:03.00 top
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND
24416 2 0:03.29 0.0 0.0 0 -20 S 0 0 0 kworker/0:2H
24365 1 0:00.04 0.0 0.3 20 0 S 238724 1380 0 gvfsd-metadata
23944 23598 6:40.25 0.0 7.7 20 0 S 1239128 38724 0 firefox
3 PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
23598 10.7 1473588 53752 16 746528 8912 26k 0 0.0 gnome-shell
23944 7.7 1239128 38724 108 582752 8388 46k 0 0.0 firefox
18581 3.2 110512 15824 392 12292 3364 23 0 0.0 dhclient
4 PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
536 1 172 rtkit rtkit ? 0:03.06 0.0 0.1 S rtkit-daemon
1 0 0 root root ? 0:27.20 0.0 0.8 S systemd
2 0 0 root root ? 0:02.22 0.0 0.0 S kthreadd
3 2 0 root root ? 7:11.70 0.0 0.0 S ksoftirqd/0

f:新增刪除所要顯示欄位

Fields Management for window 1:Def, whose current sort field is PPID
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
 
* PID = Process Id GROUP = Group Name TGID = Thread Group Id
* USER = Effective User Name PGRP = Process Group Id ENVIRON = Environment vars* PR = Priority TTY = Controlling Tty vMj = Major Faults delta
* NI = Nice Value TPGID = Tty Process Grp Id vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) SID = Session Id USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nTH = Number of Threads nsIPC=IPC namespace Inode
* SHR = Shared Memory (KiB) P = Last Used Cpu (SMP) nsMNT = MNT namespace Inode
* S = Process Status TIME = CPU Time nsNET = NET namespace Inode
* %MEM = Memory Usage (RES) SWAP = Swapped Size (KiB) nsPID=PID namespace Inode
* TIME+ = CPU Time, hundredths CODE = Code Size (KiB) nSUSER=USER namespace Inode
* COMMAND = Command Name/Line DATA = Data+Stack (KiB) nsUTS= UTS namespace Inode
* %CPU = CPU Usage nMaj = Major Page Faults
PPID = Parent Process pid nMin = Minor Page Faults
UID = Effective User Id nDRT = Dirty Pages Count
RUID = Real User Id WCHAN = Sleeping in Function
RUSER = Real User Name Flags = Task Flags <sched.h>
SUID = Saved User Id CGROUPS = Control Groups
SUSER = Saved User Name SUPGIDS = Supp Groups IDs
GID = Group Id SUPGRPS = Supp Groups Names

r:調整一個正在執行的進程Nice值

PID to renice [default pid = 920]
k:結束一個正在執行的進程

PID to signal/kill [default pid = 19156]
z:彩色/黑白顯示開關
3. vmstat -系統活動、硬體及系統資訊

      使用vmstat命令可以得到關於進程、記憶體、記憶體分頁、堵塞IO、traps及CPU活動的資訊。

r:表示執行佇列(就是說多少個進程真的分配到CPU),我測試的伺服器目前CPU比較空閒,沒 什麼程式在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。 這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果    執行佇列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b:表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
swpd:虛擬記憶體已使用的大小,如果大於0,表示你的機器實體記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到其他機器。free:空閒的實體記憶體的大小,我的機器記憶體總共8G,剩餘3415M。
buff:Linux/Unix系統是用來儲存,目錄裡面有什麼內容,許可權等的快取,我本機大概佔用300多M
cache:cache直接用來記憶我們開啟的檔案,給檔案做緩衝,我本機大概佔用300多M(這裡是Linux/Unix的聰明之處,把空閒的實體記憶體的一部分拿來做檔案和目錄的快取,是為了提高程式執行的效能,當程式使用記憶體時,buffer/cached會很快地被使用。)

si:每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示實體記憶體不夠用或者記憶體洩露了,要查詢耗記憶體進程解決掉。我的機器記憶體充裕,一切正常。

so:每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上。
bi:塊裝置每秒接收的塊數量,這裡的塊裝置是指系統上所有的磁碟和其他塊裝置,預設塊大小是1024byte,我本機上沒什麼IO操作,所以一直是0,但是我曾在處理拷貝大量資料(2-3T)的機器上看過可以達到140000/s,磁碟寫入速度差不多140M每秒。

bo:塊裝置每秒傳送的塊數量,例如我們讀取檔案,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

in:每秒CPU的中斷次數,包括時間中斷
cs:每秒上下文切換次數,例如我們呼叫系統函數,就要進行上下文切換,執行緒的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者進程的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千並行甚至幾萬並行的測試,選擇web伺服器的進程可以由進程或者執行緒的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函數,我們的程式碼就會進入核心空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

us:使用者CPU時間,我曾經在一個做加密解密很頻繁的伺服器上,可以看到us接近100,r執行佇列達到80(機器在做壓力測試,效能表現不佳)。

sy:系統CPU時間,如果太高,表示系統呼叫時間長,例如是IO操作頻繁。
id:空閒 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閒CPU使用率,us是使用者CPU使用率,sy是系統CPU使用率。

wt:等待IO CPU時間。

[root@CentOS7 ~]# vmstat -m
Cache Num Total Size Pages
fuse_inode 10 10 768 10
nf_conntrack_ffff88001a2d8000 0 0 320 12
nf_conntrack_ffffffff81a25e00 180 180 320 12
kcopyd_job 0 0 3312 9
dm_uevent 0 0 2608 12
dm_rq_target_io 0 0 136 30

每隔3秒5次:

1 [root@CentOS7 ~]# vmstat 3 5
2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3 r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 539680 17040 8 234828 508 252 7085 420 84 176 6 4 86 4 0
5 0 0 539680 17040 8 234828 0 0 0 0 29 53 0 0 100 0 0
6 1 0 539680 17040 8 234828 0 0 0 0 31 58 0 0 100 0 0
7 0 0 539680 17008 8 234828 0 0 0 0 34 67 0 0 100 0 0
8 1 0 539680 16668 8 234828 0 0 0 0 71 151 1 2 97 0 0

4. w - 顯示誰已登入

w命令顯示系統當前使用者及其執行進程的資訊。

[root@CentOS7 ~]# w root
12:26:14 up 2 days, 19:45, 3 users, load average: 0.05, 0.12, 0.13
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 Sat23 ?xdm? 1:08m 0.65s gdm-session-worker [pam/gdm-password]
root pts/0 192.168.56.1 Sun22 4:35m 0.61s 0.00s lsof
root pts/1 192.168.56.1 11:09 6.00s 0.20s 0.01s w root

5. uptime - 告訴系統已經執行了多久

uptime命令過去只顯示系統執行多久。現在,可以顯示系統執行多久、當前有多少的使用者登入、在過去的1,5,15分鐘裡平均負載時多少。

[root@CentOS7 ~]# uptime
12:30:39 up 2 days, 19:49, 3 users, load average: 0.06, 0.08, 0.12

何為系統負載呢?
      系統平均負載被定義為在特定時間間隔內執行佇列中的平均進程樹。如果一個進程滿足以下條件則其就會位於執行佇列中:
            它沒有在等待I/O操作的結果
            它沒有主動進入等待狀態(也就是沒有呼叫'wait')
            沒有被停止(例如:等待終止)
      一般來說,每個CPU核心當前活動進程數不大於3,則系統執行表現良好!當然這裡說的是每個cpu核心,也就是如果你的主機是四核cpu的話,那麼只要uptime最後輸出的一串字元數值小於12即表示系統負載不是很嚴重。當然如果達到20,那就表示當前系統負載非常嚴重。

6. ps - 顯示進程

      Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前執行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程資訊,就可以使用top命令。
      要對進程進行監測和控制,首先必須要了解當前進程的情況,也就是需要檢視當前進程,而 ps 命令就是最基本同時也是非常強大的進程檢視命令。使用該命令可以確定有哪些進程正在執行和執行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等。總之大部分資訊都是可以通過執行該命令得到的。
      ps為我們提供了進程的一次性的檢視,它所提供的檢視結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。

linux上進程有5種狀態:
 
      1. 執行(正在執行或在執行佇列中等待)
      2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)       

      3. 不可中斷(收到信號不喚醒和不可執行, 進程必須等待直到有中斷發生)       

      4. 僵死(進程已終止, 但進程描述符存在, 直到父進程呼叫wait4()系統呼叫後釋放)     
      5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止執行執行) 
ps工具標識進程的5種狀態碼:
        D 不可中斷 uninterruptible sleep (usually IO)
      R 執行 runnable (on run queue)        S 中斷 sleeping        T 停止 traced or stopped        Z 僵死 a defunct (”zombie”) process

[root@linux ~]# ps aux

[root@linux ~]# ps -lA

[root@linux ~]# ps axjf

引數:

-A :所有的 process 均顯示出來,與 -e 具有同樣的效用;

-a :不與 terminal 有關的所有 process ;

-u :有效使用者 (effective user) 相關的 process ;

x :通常與 a 這個引數一起使用,可列出較完整資訊。

輸出格式規劃:

l :較長、較詳細的將該 PID 的的資訊列出;

j :工作的格式 (jobs format)

-f :做一個更為完整的輸出。

特別說明:由於 ps 能夠支援的 OS 型別相當的多,所以他的引數多的離譜!而且有沒有加上 - 差很多!詳細的用法應該要參考 man ps。

例1.將目前屬於您自己這次登入的 PID 與相關資訊列示出來

[root@CentOS7 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19160 19156 0 80 0 - 29172 wait pts/1 00:00:00 bash
0 R 0 20465 19160 0 80 0 - 34343 - pts/1 00:00:00 ps

上面這個資訊其實很多,各相關資訊的意義為:

F:代表這個程式的flag,4代表使用者為super user

S:代表這個程式的狀態

PID:這個程式的ID

C:CPU 使用的資源百分比

PRI:這個是 Priority (優先執行序) 的縮寫

NI:這個是 Nice 值

ADDR:這個是 kernel function,指出該程式在記憶體的那個部分。如果是個 running的程式,一般就是『 - 』的啦!

SZ:使用掉的記憶體大小

WCHAN:目前這個程式是否正在運作當中,若為 - 表示正在運作

TTY:登入者的終端

TIME:使用掉的CPU時間

CMD:所下達的指令

例2.列出目前所有的正在記憶體當中的程式

[root@CentOS7 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 191492 4300 ? Ss May20 0:28 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S May20 0:02 [kthreadd]
root 3 0.1 0.0 0 0 ? S May20 7:12 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S May20 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S May20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S May20 0:00 [rcuob/0]
root 10 0.1 0.0 0 0 ? S May20 6:10 [rcu_sched]
root 11 0.3 0.0 0 0 ? S May20 14:13 [rcuos/0]
root 12 0.0 0.0 0 0 ? S May20 0:03 [watchdog/0]
root 13 0.0 0.0 0 0 ? S< May20 0:00 [khelper]
root 14 0.0 0.0 0 0 ? S May20 0:00 [kdevtmpfs]
root 15 0.0 0.0 0 0 ? S< May20 0:00 [netns]
root 16 0.0 0.0 0 0 ? S< May20 0:00 [perf]

USER:該 process 屬於那個使用者賬號的

PID :該 process 的號碼

%CPU:該 process 使用掉的 CPU 資源百分比

%MEM:該 process 所佔用的實體記憶體百分比

VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)

RSS :該 process 占用的固定的記憶體量 (Kbytes)

TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者

 程式,若為 pts/0 等等的,則表示為由網路連線進主機的程式

STAT:該程式目前的狀態,主要的狀態有:

R:該程式目前正在運作,或者是可被運作

S:該程式目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號 (signal) 喚醒。

T:該程式目前正在偵測或者是停止了;

Z:該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀態

START:該 process 被觸發啟動的時間

TIME :該 process 實際使用 CPU 運作的時間

COMMAND:該程式的實際指令為

例3.顯示出所有的程式

[root@CentOS7 ~]# ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 47873 ep_pol ? 00:00:29 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:02 kthreadd
1 S 0 3 2 0 80 0 - 0 smpboo ? 00:07:13 ksoftirqd/0
1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0
1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
1 S 0 9 2 0 80 0 - 0 rcu_no ? 00:00:00 rcuob/0
1 S 0 10 2 0 80 0 - 0 rcu_gp ? 00:06:12 rcu_sched
1 S 0 11 2 0 80 0 - 0 rcu_no ? 00:14:16 rcuos/0
5 S 0 12 2 0 -40 - - 0 smpboo ? 00:00:03 watchdog/0
1 S 0 13 2 0 60 -20 - 0 rescue ? 00:00:00 khelper

例4.列出類似程式樹的程式顯示

[root@CentOS7 ~]# ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:02 [kthreadd]
2 3 0 0 ? -1 S 0 7:13 _ [ksoftirqd/0]
2 7 0 0 ? -1 S 0 0:00 _ [migration/0]
2 8 0 0 ? -1 S 0 0:00 _ [rcu_bh]
2 9 0 0 ? -1 S 0 0:00 _ [rcuob/0]
2 10 0 0 ? -1 S 0 6:12 _ [rcu_sched]
2 11 0 0 ? -1 S 0 14:16 _ [rcuos/0]

例5.找出與 crypto 與 bash 這兩個服務有關的 PID 號碼

[root@CentOS7 ~]# ps aux | egrep '(crypto|bash)'
root 30 0.0 0.0 0 0 ? S< May20 0:00 [crypto]
root 597 0.0 0.1 115240 772 ? S May20 0:14 /bin/bash /usr/sbin/ksmtuned
root 23362 0.0 0.6 116556 3272 pts/0 Ss 16:50 0:00 -bash
root 23521 0.0 0.0 52852 44 ? Ss May21 0:01 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 25992 0.0 0.1 112648 956 pts/0 S+ 20:08 0:00 grep -E --color=auto (crypto|bash)

7. free - 記憶體使用情況

[root@CentOS7 ~]# free
                  1          2          3          4          5          6
1              total      used      free    shared    buffers    cached
2 Mem:      24677460  23276064    1401396          0    870540  12084008
3 -/+ buffers/cache:  10321516  14355944
4 Swap:    25151484    224188  24927296

free的輸出一共有四行,第四行為交換區的資訊,分別是交換的總量(total),使用量(used)和有多少空閒的交換區(free),這個比較清楚,不說太多。
  free輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說明記憶體使用情況的。第一列是總量(total),第二列是使用量(used),第三列是可用量(free)。

  第一行的輸出時從作業系統(OS)來看的。也就是說,從OS的角度來看,計算機上一共有:

      24677460KB(預設時free的單位為KB)實體記憶體,即FO[2][1];

      在這些實體記憶體中有23276064KB(即FO[2][2])被使用了;

      還用1401396KB(即FO[2][3])是可用的;
這裡得到第一個等式:

      FO[2][1] = FO[2][2] + FO[2][3]
      FO[2][4]表示被幾個進程共用的記憶體的,現在已經deprecated,其值總是0(當然在一些系統上也可能不是0,主要取決於free命令是怎麼實現的)。FO[2][5]表示被OS buffer住的記憶體。FO[2][6]表示被OS cache的記憶體。在有些時候buffer和cache這兩個詞經常混用。不過在一些比較低層的軟體裡是要區分這兩個詞的,看老外的洋文:

      A buffer is something that has yet to be "written" to disk.

      A cache is something that has been "read" from the disk and stored for later use.

 free輸出的第二行是從一個應用程式的角度看系統記憶體的使用情況。

      對於FO[3][2],即-buffers/cache,表示一個應用程式認為系統被用掉多少記憶體

      對於FO[3][3],即+buffers/cache,表示一個應用程式認為系統還有多少記憶體
 因為被系統cache和buffer占用的記憶體可以被快速回收,所以通常FO[3][3]比FO[2][3]會大很多。
這裡還用兩個等式:也就是說buffer是用於存放要輸出到disk(塊裝置)的資料的,而cache是存放從disk上讀出的資料。這二者是為了提高IO效能的,並由OS管理。

      FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]

      FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

8. iostat - CPU平均負載,硬碟活動

iostat命令可報告中央處理器(CPU)的統計資訊,各種裝置、分割區及網路檔案系統輸入/輸出的統計資訊。

[root@CentOS7 ~]# iostat
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.20 0.00 3.53 3.54 0.00 87.73
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 197.17 6120.99 371.74 1677443445 101873448

avg-cpu段:

%user: 在使用者級別執行所使用的CPU的百分比

%nice: nice操作所使用的CPU的百分比

%sys: 在系統級別(kernel)執行所使用CPU的百分比

%iowait: CPU等待硬體I/O時,所佔用CPU百分比

%idle: CPU空閒時間的百分比

Device段:

tps: 每秒鐘傳送到的I/O請求數

Blk_read /s: 每秒讀取的block數

Blk_wrtn/s: 每秒寫入的block數

Blk_read:  讀入的block總數

Blk_wrtn:  寫入的block總數

例.每隔2秒顯示一次sda及上面所有分割區的統計資訊,共輸出1次

[root@CentOS7 ~]# iostat -p sda 2 1
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.19 0.00 3.52 3.54 0.00 87.75
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 196.83 6110.31 371.21 1677443609 101907192
sda1 0.01 0.02 0.01 4585 2060
sda2 43.56 438.87 217.75 120482400 59778512
sda3 152.42 5671.42 153.45 1556955824 42126620

9. mpstat - 多處理器使用率

mpstat命令可以顯示所有可用處理器的使用情況,處理器編號從0開始。mpstat -P ALL顯示每個處理器的平均使用率。

[root@CentOS7 ~]# mpstat -P ALL
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)
10:45:33 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:45:33 PM all 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76
10:45:33 PM 0 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76

 10. pmap - 進程的記憶體使用

pmap命令可以顯示進程的記憶體對映,使用這個命令可以找出造成記憶體瓶頸的原因。

[root@CentOS7 ~]# pmap -d 23362
23362: -bash
Address Kbytes Mode Offset Device Mapping
0000000000400000 884 r-x-- 0000000000000000 000:00020 bash
00000000006dc000 4 r---- 00000000000dc000 000:00020 bash
00000000006dd000 36 rw--- 00000000000dd000 000:00020 bash
00000000006e6000 24 rw--- 0000000000000000 000:00000 [ anon ]
000000000221d000 1576 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d3fc3d000 103580 r---- 0000000000000000 000:00020 locale-archive
00007f7d46164000 44 r-x-- 0000000000000000 000:00020 libnss_files-2.17.so
00007f7d4616f000 2044 ----- 000000000000b000 000:00020 libnss_files-2.17.so
00007f7d4636e000 4 r---- 000000000000a000 000:00020 libnss_files-2.17.so
00007f7d4636f000 4 rw--- 000000000000b000 000:00020 libnss_files-2.17.so
00007f7d46370000 24 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46376000 1752 r-x-- 0000000000000000 000:00020 libc-2.17.so
00007f7d4652c000 2048 ----- 00000000001b6000 000:00020 libc-2.17.so
00007f7d4672c000 16 r---- 00000000001b6000 000:00020 libc-2.17.so
00007f7d46730000 8 rw--- 00000000001ba000 000:00020 libc-2.17.so
00007f7d46732000 20 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46737000 12 r-x-- 0000000000000000 000:00020 libdl-2.17.so
00007f7d4673a000 2044 ----- 0000000000003000 000:00020 libdl-2.17.so
00007f7d46939000 4 r---- 0000000000002000 000:00020 libdl-2.17.so
00007f7d4693a000 4 rw--- 0000000000003000 000:00020 libdl-2.17.so
00007f7d4693b000 148 r-x-- 0000000000000000 000:00020 libtinfo.so.5.9
00007f7d46960000 2048 ----- 0000000000025000 000:00020 libtinfo.so.5.9
00007f7d46b60000 16 r---- 0000000000025000 000:00020 libtinfo.so.5.9
00007f7d46b64000 4 rw--- 0000000000029000 000:00020 libtinfo.so.5.9
00007f7d46b65000 132 r-x-- 0000000000000000 000:00020 ld-2.17.so
00007f7d46d6d000 12 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d7c000 4 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d7d000 28 r--s- 0000000000000000 000:00020 gconv-modules.cache
00007f7d46d84000 8 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d86000 4 r---- 0000000000021000 000:00020 ld-2.17.so
00007f7d46d87000 4 rw--- 0000000000022000 000:00020 ld-2.17.so
00007f7d46d88000 4 rw--- 0000000000000000 000:00000 [ anon ]
00007fffc4354000 132 rw--- 0000000000000000 000:00000 [ stack ]
00007fffc43e0000 8 r-x-- 0000000000000000 000:00000 [ anon ]
ffffffffff600000 4 r-x-- 0000000000000000 000:00000 [ anon ]
mapped: 116688K writeable/private: 1864K shared: 28K

最後一行非常重要:

mapped: 116688K 記憶體對映所佔空間大小

writeable/private: 1864K 私有地址空間大小

shared: 28K 共用地址空間大小

11. netstat和ss - 網路相關資訊

        Netstat 命令用於顯示各種網路相關資訊,如網路連線,路由表,介面狀態 (Interface Statistics),masquerade 連線,多播成員 (Multicast Memberships) 等等。

 從整體上看,netstat的輸出結果可以分為兩個部分:

      一個是Active Internet connections,稱為有源TCP連線,其中"Recv-Q"和"Send-Q"指%0A的是接收佇列和傳送佇列。這些數位一般都應該是0。如果不是則表示軟體包正在佇列中堆積。這種情況只能在非常少的情況見到。

      另一個是Active UNIX domain sockets,稱為有源Unix域套介面(和網路通訊端一樣,但是只能用於本機通訊,效能可以提高一倍)。Proto顯示連線使用的協定,RefCnt表示連線到本套介面上的進程號,Types顯示套介面的型別,State顯示套介面當前的狀態,Path表示連線到套介面的其它進程使用的路徑名。

[root@CentOS7 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:40108 123.59.138.92:https ESTABLISHED
tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 6846 /run/systemd/notify
unix 5 [ ] DGRAM 6858 /run/systemd/journal/socket
unix 22 [ ] DGRAM 6860 /dev/log
unix 2 [ ] DGRAM 9469 /run/systemd/shutdownd
unix 2 [ ] DGRAM 14069
unix 2 [ ] DGRAM 1048183
unix 3 [ ] STREAM CONNECTED 1046317

常見引數

-a (all)顯示所有選項,預設不顯示LISTEN相關

-t (tcp)僅顯示tcp相關選項

-u (udp)僅顯示udp相關選項

-n 拒絕顯示別名,能顯示數位的全部轉化成數位。

-l 僅列出有在 Listen (監聽) 的服務狀態

-p 顯示建立相關連結的程式名

-r 顯示路由資訊,路由表

-e 顯示擴充套件資訊,例如uid等

-s 按各個協定進行統計

-c 每隔一個固定時間,執行該netstat命令。

提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

[root@CentOS7 ~]# netstat -at 列出所有 tcp 埠
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:37671 123.59.87.202:https ESTABLISHED
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN

[root@CentOS7 ~]# netstat -au 列出所有 udp 埠
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lt 只列出所有監聽 tcp 埠
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN

[root@CentOS7 ~]# netstat -lu 只列出所有監聽 udp 埠
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lu 只列出所有監聽 udp 埠
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lx 只列出所有監聽 UNIX 埠
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 1046533 /run/user/0/pulse/native
unix 2 [ ACC ] STREAM LISTENING 9738 /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 1046289 /run/user/0/keyring/pkcs11
unix 2 [ ACC ] STREAM LISTENING 1046292 /run/user/0/keyring/ssh
unix 2 [ ACC ] STREAM LISTENING 1044502 /run/user/0/keyring/control
unix 2 [ ACC ] STREAM LISTENING 19100 @/tmp/.X11-unix/X0

顯示 TCP 或 UDP 埠的統計資訊 netstat -st 或 -su

[root@CentOS7 ~]# netstat -st
IcmpMsg:
InType3: 42
InType11: 24
OutType3: 48
Tcp:
71276 active connections openings
26415 passive connection openings
443 failed connection attempts
22567 connection resets received
13 connections established
6169222 segments received
6167435 segments send out
1531 segments retransmited
0 bad segments received.
101775 resets sent
UdpLite:
TcpExt:
4160 TCP sockets finished time wait in fast timer
159348 delayed acks sent
243 delayed acks further delayed because of locked socket
Quick ack mode was activated 64 times
119 packets directly queued to recvmsg prequeue.
113274 bytes directly in process context from backlog
346692 bytes directly received in process context from prequeue
642042 packet headers predicted
151 packets header predicted and directly queued to user
2108179 acknowledgments not containing data payload received
833025 predicted acknowledgments
49 congestion windows recovered without slow start after partial ack
6 retransmits in slow start
172 other TCP timeouts
TCPLossProbes: 855
TCPLossProbeRecovery: 831
48 DSACKs sent for old packets
863 DSACKs received
20455 connections reset due to unexpected data
44 connections reset due to early user close
21 connections aborted due to timeout
TCPDSACKIgnoredNoUndo: 833
TCPSpuriousRTOs: 4
IPReversePathFilter: 314
TCPRetransFail: 10
TCPRcvCoalesce: 30786
TCPChallengeACK: 7
TCPSpuriousRtxHostQueues: 29
TCPAutoCorking: 1236
TCPSynRetrans: 616
TCPOrigDataSent: 1370187
TCPHystartTrainDetect: 4
TCPHystartTrainCwnd: 82
IpExt:
InNoRoutes: 32
InMcastPkts: 1724
OutMcastPkts: 738
InBcastPkts: 43901
InOctets: 1655483718
OutOctets: 1440836672
InMcastOctets: 374261
OutMcastOctets: 119692
InBcastOctets: 3810738
InNoECTPkts: 6421160

[root@CentOS7 ~]# netstat -su
IcmpMsg:
InType3: 42
InType11: 24
OutType3: 48
Udp:
115000 packets received
48 packets to unknown port received.
0 packet receive errors
114624 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
IpExt:
InNoRoutes: 32
InMcastPkts: 1724
OutMcastPkts: 738
InBcastPkts: 43901
InOctets: 1655485325
OutOctets: 1440841862
InMcastOctets: 374261
OutMcastOctets: 119692
InBcastOctets: 3810738
InNoECTPkts: 6421188

在 netstat 輸出中顯示 PID 和進程名稱

[root@CentOS7 ~]# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED 23944/firefox
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 388 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:40833 123.59.87.200:https ESTABLISHED 920/daomonit

netstat 將每隔一秒輸出網路資訊

[root@CentOS7 ~]# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED

顯示系統不支援的地址族

[root@CentOS7 ~]# 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.

顯示核心路由資訊

[root@CentOS7 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

找出程式執行的埠

[root@CentOS7 ~]# netstat -ap | grep ssh
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 925/sshd
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN 23358/sshd: root@pt
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt

顯示網路介面列表

[root@CentOS7 ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 186339 0 0 0 186275 0 0 0 BMU
eth0 1500 866623 0 0 0 747980 0 0 0 BMRU
eth1 1500 101288 0 0 0 83187 0 0 0 BMRU
lo 65536 5276771 0 0 0 5276771 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU

      ss是Socket Statistics的縮寫。顧名思義,ss命令可以用來獲取socket統計資訊,它可以顯示和netstat類似的內容。但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連線狀態的資訊,而且比netstat更快速更高效。

命令引數:
-h, --help 幫助資訊
-V, --version 程式版本資訊
-n, --numeric 不解析服務名稱
-r, --resolve        解析主機名
-a, --all 顯示所有通訊端(sockets)
-l, --listening 顯示監聽狀態的通訊端(sockets)
-o, --options        顯示計時器資訊
-e, --extended      顯示詳細的通訊端(sockets)資訊
-m, --memory        顯示通訊端(socket)的記憶體使用情況
-p, --processes 顯示使用通訊端(socket)的進程
-i, --info 顯示 TCP內部資訊
-s, --summary 顯示通訊端(socket)使用概況
-4, --ipv4          僅顯示IPv4的通訊端(sockets)
-6, --ipv6          僅顯示IPv6的通訊端(sockets)
-0, --packet        顯示 PACKET 通訊端(socket)
-t, --tcp 僅顯示 TCP通訊端(sockets)
-u, --udp 僅顯示 UCP通訊端(sockets)
-d, --dccp 僅顯示 DCCP通訊端(sockets)
-w, --raw 僅顯示 RAW通訊端(sockets)
-x, --unix 僅顯示 Unix通訊端(sockets)
-f, --family=FAMILY  顯示 FAMILY型別的通訊端(sockets),FAMILY可選,支援  unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
      QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE    將原始TCP通訊端(sockets)資訊轉儲到檔案
 -F, --filter=FILE  從檔案中都去過濾器資訊
      FILTER := [ state TCP-STATE ] [ EXPRESSION ]
顯示TCP連線

[root@CentOS7 ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.0.1:ipp *:*
LISTEN 0 128 127.0.0.1:x11-ssh-offset *:*
ESTAB 0 0 10.0.2.15:33164 54.191.11.118:https

顯示 Sockets 摘要

[root@CentOS7 ~]# ss -s
Total: 555 (kernel 567)
TCP: 21 (estab 13, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
 
Transport Total IP IPv6
*    567 - -
RAW    2 0 2
UDP    14 11 3
TCP    20 17 3
INET    36 28 8
FRAG    0 0 0

列出所有開啟的網路連線埠

[root@CentOS7 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1216349100 *
nl UNCONN 0 0 rtnl:2059403794 *
nl UNCONN 0 0 rtnl:geoclue/23600 *

檢視進程使用的socket

[root@CentOS7 ~]# ss -pl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1216349100 *
nl UNCONN 0 0 rtnl:2059403794 *

顯示所有UDP Sockets

[root@CentOS7 ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 *:53491 *:*
ESTAB 0 0 10.0.2.15:42245 120.25.108.11:ntp
UNCONN 0 0 *:47643 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 *%virbr0:bootps *:*
UNCONN 0 0 127.0.0.1:323 *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 *:14662 *:*
ESTAB 0 0 10.0.2.15:39026 202.118.1.81:ntp

12. tcpdump:詳細的網路流量分析

      用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網路上的封包進行截獲的包分析工具。 tcpdump可以將網路中傳送的封包的“頭”完全截獲下來提供分析。它支援針對網路層、協定、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的資訊。

引數:
-nn,直接以 IP 及 Port Number 顯示,而非主機名與服務名稱。
-i,後面接要「監聽」的網路介面,例如 eth0, lo, ppp0 等等的介面。
-w,如果你要將監聽所得的封包資料儲存下來,用這個引數就對了。後面接檔名。
-c,監聽的封包數,如果沒有這個引數, tcpdump 會持續不斷的監聽,直到使用者輸入 [ctrl]-c 為止。

-A,封包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁封包資料。
-e,使用資料連線層 (OSI 第二層) 的 MAC 封包資料來顯示。
-q,僅列出較為簡短的封包資訊,每一行的內容比較精簡。
-X,可以列出十六進位制 (hex) 以及 ASCII 的封包內容,對於監聽封包內容很有用。
-r,從後面接的檔案將封包資料讀出來。那個「檔案」是已經存在的檔案,並且這個「檔案」是由 -w 所製作出來的。
      所欲捕獲的資料內容:我們可以專門針對某些通訊協定或者是 IP 來源進行封包捕獲。那就可以簡化輸出的結果,並取得最有用的資訊。
      常見的表示方法有:
      'host foo', 'host 127.0.0.1' :針對單台主機來進行封包捕獲。
      'net 192.168' :針對某個網段來進行封包的捕獲。
      'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制。
      'tcp port 21':還可以針對通訊協定檢測,如tcp、udp、arp、ether 等。
      除了這三種型別的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'||'。

[root@CentOS7 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
02:58:12.453576 IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [F.], seq 3046243613, ack 2957421906, win 42600, length 0
02:58:12.453863 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [.], ack 1, win 65535, length 0
02:58:12.454352 IP 10.0.2.15.43009 > 112.54.207.8.domain: 15449+ PTR? 93.138.59.123.in-addr.arpa. (44)
02:58:12.484893 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [P.], seq 1:54, ack 1, win 65535, length 53
02:58:12.484932 IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [R], seq 3046243614, win 0, length 0
02:58:12.485000 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [F.], seq 54, ack 1, win 65535, length 0
35 packets captured
162 packets received by filter
97 packets dropped by kernel

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-06/132053.htm


IT145.com E-mail:sddin#qq.com