Linux 性能監控之命令行工具

引言
對於系統和網絡管理員來講天天監控和調試Linux系統的性能問題是一項繁重的工做。這些命令行工具能夠在各類Linux系統下使用,能夠用於監控和查找產生性能問題的緣由。這個命令行工具列表提供了足夠的工具,您能夠挑選適用於您的監控場景的工具。

1. lsof - 列出打開的文件

       在許多Linux或者類Unix系統裏都有lsof命令,它經常使用於以列表的形式顯示全部打開的文件和進程。打開的文件包括磁盤文件、網絡套接字、管道、設備和進程。使用這條命令的主要情形之一就是在沒法掛載磁盤和顯示正在使用或者打開某個文件的錯誤信息的時候。node

經常使用的參數列表:
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秒鐘刷新一次。

經常使用熱鍵
linux

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 或 -suios

[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
相關文章
相關標籤/搜索