一個後臺開發工程師必須掌握的那些Linux命令--性能監測篇


本篇文章是Linux命令系列的第一篇文章

又挖了一個新坑~
本系列將按照上面五大模塊對Linux命令講解

讓你知道一個後臺開發工程師
除了cd  ls  rm這些基本的操作
真正到生產環境下,還需要掌握哪些linux命令


建立了一個倉庫 
將本系列所涉及的命令都放到github倉庫裏了

會保證一直更新 
歡迎大家多提issue   多多交流
(順手也可以給個star , 哈哈~

點擊文末 "閱讀原文"

獲取倉庫地址

性能監測相關命令

mpstat

功能:

顯示CPU的狀態信息
這些信息存放在/proc/stat文件中。

在多CPUs系統裏,

其不但能查看所有CPU的平均狀況信息,

而且能夠查看特定CPU的信息。 

輸入語法:

mpstat(選項)(參數)

選項

-A : 此選項等效於# mpstat -I ALL -u -P ALL

-I {SUM | CPU | ALL} : 報告中斷統計信息。 使用SUM關鍵字,mpstat命令報告每個處理器的中斷總數。使用CPU關鍵字,顯示CPU或CPU每秒接收的每個中斷的數量。ALL關鍵字等效於指定上面的所有關鍵字,因此顯示所有中斷統計信息。

-P {cpu [,...] | ON | ALL} : 指示要報告統計信息的處理器編號。cpu是處理器號。注意,處理器0是第一個處理器。ON關鍵字表示將爲每個在線處理器報告統計信息,而ALL關鍵字指示要爲所有處理器報告統計信息。

參數

間隔時間:每次報告的間隔時間(秒); 
次數:顯示報告的次數。

輸出信息:

user 在internal時間段裏,用戶態的CPU時間(%),不包含 nice值爲負 進程 (usr/total)*100  
nice 在internal時間段裏,nice值爲負進程的CPU時間(%)   (nice/total)*100  
system 在internal時間段裏,內核態的CPU時間(%)   (system/total)*100
iowait 在internal時間段裏,硬盤IO等待時間(%) (iowait/total)*100
irq 在internal時間段裏,硬中斷時間(%)      (irq/total)*100
soft 在internal時間段裏,軟中斷時間(%)    (softirq/total)*100
idle 在internal時間段裏,CPU除去等待磁盤IO操作外的因爲任何原因而空閒的時間閒置時間(%)(idle/total)*100

實例:

mpstat

顯示開機到現在以來cpu的平均狀態信息

Linux 4.15.0-88-generic (kyle)     2020年02月25日     _x86_64_    (4 CPU)

20時12分09秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20時12分09秒  all   27.16    0.55    9.85    0.34    0.00    0.43    0.00    0.00    0.00   61.66
mpstat -P ALL 2 3

每隔2秒顯示一次 所有cpu的狀態信息
一共產生3個間隔的信息
最後給出這3次間隔的平均信息

kylechen@kyle:~$ mpstat -P ALL 2 3
Linux 4.15.0-88-generic (kyle)     2020年02月25日     _x86_64_    (4 CPU)

20時12分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20時12分45秒  all    9.96    0.00    3.57    0.00    0.00    0.12    0.00    0.00    0.00   86.35
20時12分45秒    0    8.96    0.00    2.99    0.00    0.00    0.00    0.00    0.00    0.00   88.06
20時12分45秒    1    8.87    0.00    3.45    0.49    0.00    0.49    0.00    0.00    0.00   86.70
20時12分45秒    2    9.76    0.00    2.44    0.00    0.00    0.00    0.00    0.00    0.00   87.80
20時12分45秒    3   12.32    0.00    4.43    0.00    0.00    0.00    0.00    0.00    0.00   83.25

20時12分45秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20時12分47秒  all   13.43    0.00    4.68    0.00    0.00    0.12    0.00    0.00    0.00   81.77
20時12分47秒    0   16.59    0.00    5.69    0.00    0.00    0.47    0.00    0.00    0.00   77.25
20時12分47秒    1   12.08    0.00    3.86    0.00    0.00    0.00    0.00    0.00    0.00   84.06
20時12分47秒    2   12.80    0.00    4.74    0.00    0.00    0.00    0.00    0.00    0.00   82.46
20時12分47秒    3   12.44    0.00    5.26    0.00    0.00    0.00    0.00    0.00    0.00   82.30

20時12分47秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20時12分49秒  all    8.44    0.00    2.02    0.00    0.00    0.13    0.00    0.00    0.00   89.42
20時12分49秒    0    7.69    0.00    1.54    0.00    0.00    0.51    0.00    0.00    0.00   90.26
20時12分49秒    1    6.47    0.00    2.99    0.00    0.00    0.50    0.00    0.00    0.00   90.05
20時12分49秒    2   10.66    0.00    1.02    0.00    0.00    0.00    0.00    0.00    0.00   88.32
20時12分49秒    3    8.46    0.00    2.49    0.00    0.00    0.00    0.00    0.00    0.00   89.05

平均時間:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均時間:  all   10.65    0.00    3.44    0.00    0.00    0.12    0.00    0.00    0.00   85.78
平均時間:    0   11.20    0.00    3.46    0.00    0.00    0.33    0.00    0.00    0.00   85.01
平均時間:    1    9.17    0.00    3.44    0.16    0.00    0.33    0.00    0.00    0.00   86.91
平均時間:    2   11.09    0.00    2.77    0.00    0.00    0.00    0.00    0.00    0.00   86.13
平均時間:    3   11.09    0.00    4.08    0.00    0.00    0.00    0.00    0.00    0.00   84.83
mpstat -P ALL -I SUM

查看cpu中斷的統計(各個cpu分開顯示)

inux 4.15.0-88-generic (kyle)     2020年02月25日     _x86_64_    (4 CPU)

20時13分24秒  CPU    intr/s
20時13分24秒  all   2057.27
20時13分24秒    0    473.14
20時13分24秒    1    591.17
20時13分24秒    2    687.38
20時13分24秒    3    493.70
mpstat -I SUM

查看cpu中斷的統計(各個cpu合併顯示)

kylechen@kyle:~$  mpstat -I SUM
Linux 4.15.0-88-generic (kyle)     2020年02月25日     _x86_64_    (4 CPU)

20時13分47秒  CPU    intr/s
20時13分47秒  all   2036.32

free

功能

free指令會顯示內存的使用情況,
包括實體內存,
虛擬的交換文件內存,
共享內存區段,
以及系統核心使用的緩衝區等。

輸入語法

free [-bkmotV][-s <間隔秒數>]
參數說明:

-b  以Byte爲單位顯示內存使用情況。
-k  以KB爲單位顯示內存使用情況。
-m  以MB爲單位顯示內存使用情況。
-h  以合適的單位顯示內存使用情況,最大爲三位數,自動計算對應的單位值。單位如下:

B = bytes
K = kilos
M = megas
G = gigas
T = teras
-t  顯示內存總和列。
-V  顯示版本信息。
-o  不顯示緩衝區調節列。
-s<間隔秒數>持續觀察內存使用狀況。

輸出信息

total 列顯示系統總的可用物理內存和交換空間大小。
used 列顯示已經被使用的物理內存和交換空間。
free 列顯示還有多少物理內存和交換空間可用使用。
shared 列顯示被共享使用的物理內存大小。(進程間的共享內存)
buff/cache 列顯示被   磁盤緩存 使用的物理內存大小。(buffer表示寫緩衝   cache表示讀緩衝)
available 列顯示還可以被應用程序使用的物理內存大小
注意點
1.當應用程序需要內存時,如果沒有足夠的 free 內存可以用
,內核就會從 buffer 和 cache 中回收內存來滿足應用程序的請
求。所以從應用程序的角度來說,available  = free + buffer + cache。
請注意,這只是一個很理想的計算方式,實際中的數據往往有較大的誤差。

2.swap space 是磁盤上的一塊區域,可以是一個分區,也可以是一個文件
。所以具體的實現可以是 swap 分區也可以是 swap 文件
。當系統物理內存喫緊時,Linux 會將內存中不常訪問的數據保存到 swap 上,
這樣系統就有更多的物理內存爲各個進程服務,而當系統需要訪問 swap 上存儲的內容時
,再將 swap 上的數據加載到內存中,這就是常說的換出和換入。
交換空間可以在一定程度上緩解內存不足的情況,
但是它需要讀寫磁盤數據,所以性能不是很高。

實例

free 不指定單位顯示內存使用情況

              總計         已用        空閒      共享    緩衝/緩存    可用
內存:     3920116     2680416      179976      596300     1059724      408108
交換:      999420      519916      479504
free -h以合適的單位顯示內存使用情況
kylechen@kyle:~$ free -h
              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.6G        178M        573M        1.0G        401M
交換:        975M        507M        468M
free -th以合適的單位顯示內存使用情 況,同時顯示總量列
kylechen@kyle:~$ free -th
              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        200M        570M        1.0G        424M
交換:        975M        507M        468M
總量:        4.7G        3.0G        668M
free -h -s 1  以1秒爲間隔顯示內存使用情況

kylechen@kyle:~$ free -h -s 1
              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        198M        569M        1.0G        421M
交換:        975M        507M        468M

              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        196M        571M        1.0G        419M
交換:        975M        507M        468M

              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        195M        571M        1.0G        419M
交換:        975M        507M        468M

              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        196M        571M        1.0G        420M
交換:        975M        507M        468M

              總計         已用        空閒      共享    緩衝/緩存    可用
內存:        3.7G        2.5G        199M        568M        1.0G        423M
交換:        975M        507M        468M

top

功能

top是系統管理員最重要的工具之一。被廣泛用於監視服務器的負載。
它可以動態的查看系統當前正在運行的進程情況 , 內存使用情況, cpu使用情況
也就是說上面mpstate 和free能實現的功能 它都內在的包含了

輸入語法

很簡單 直接輸入top

輸出信息

任務: 298 total,   1 running, 246 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.7 us,  1.6 sy,  0.0 ni, 92.6 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3920116 total,   301948 free,  2514912 used,  1103256 buff/cache
KiB Swap:   999420 total,   480272 free,   519148 used.   618380 avail Mem 

進程id USER      PR  NI    VIRT    RES    SHR �  %CPU %MEM     TIME+ COMMAND     
 1590 kylechen  20   0 3974220 265424  72628 S   7.3  6.8   5:33.19 gnome-shell 
 1446 kylechen  20   0  521960  38412  19292 S   6.3  1.0   3:28.27 Xorg        
 3008 kylechen  20   0  780520  50972  32452 S   4.6  1.3   0:17.32 gnome-term+ 
 2779 kylechen  20   0 1201196 318344  79024 S   1.3  8.1  11:48.81 chrome      
 1955 kylechen  20   0 1505112 399200 243564 S   1.0 10.2   5:32.38 chrome      
    1 root      20   0  225908   4064   1584 S   0.7  0.1   0:08.15 systemd     
 1036 gdm       20   0 3492528  89676  62056 S   0.7  2.3   0:11.70 gnome-shell 
 1993 kylechen  20   0  556488  55780  24440 S   0.7  1.4   0:34.27 chrome      
    8 root      20   0       0      0      0 I   0.3  0.0   0:08.76 rcu_sched   
  983 mysql     20   0 1358648      0      0 S   0.3  0.0   0:03.85 mysqld      
 1571 kylechen  20   0  220792    156      0 S   0.3  0.0   0:03.21 at-spi2-re+ 
 2192 kylechen  20   0  486420   5828      0 S   0.3  0.1   0:01.88 sogou-qimp+ 
 5330 kylechen  20   0 2621992 450080  80948 S   0.3 11.5   1:13.24 XMind       
 5708 root      20   0       0      0      0 I   0.3  0.0   0:01.65 kworker/u8+ 
 6974 kylechen  20   0  880400 185648 107616 S   0.3  4.7   0:45.80 chrome      
 7245 root      20   0       0      0      0 I   0.3  0.0   0:00.22 kworker/2:0 
 7760 kylechen  20   0   51360   4004   3332 R   0.3  0.1   0:00.19 top    

輸出信息如上所示 一大坨 很繁瑣 咱們一行一行來分析

第一行表示 當前的進程狀態 總共有298個進程  1個處理runing   246個處於sleeping  0個處於stopped狀態

任務: 298 total,   1 running, 246 sleeping,   0 stopped

第二行表示 當前的cpu狀態  這裏顯示的狀態參數其實和mpstat那裏說的是一樣的 具體可以看上面的mpstat命令講解

%Cpu(s):  5.7 us,  1.6 sy,  0.0 ni, 92.6 id,  0.1 wa,  0.0 hi,  

**第三四行表示 **當前的內存狀態  這裏顯示的狀態參數其實和free那裏說的是一樣的 具體可以看上面的free命令講解

KiB Mem :  3920116 total,   301948 free,  2514912 used,  1103256 buff/cache
KiB Swap:   999420 total,   480272 free,   519148 used.   6183800.1 wa,  0.0 hi,  

後面幾行其實 表示的就是每個進程具體佔用的系統資源 會隨着時間動態變化

PID

進程ID,進程的唯一標識符

USER

進程所有者的實際用戶名。

PR

進程的調度優先級。這個字段的一些值是’rt’。這意味這這些進程運行在實時態。

NI

進程的nice值(優先級)。越小的值意味着越高的優先級。

VIRT

進程使用的虛擬內存。

RES

駐留內存大小。駐留內存是任務使用的非交換物理內存大小。

SHR

SHR是進程使用的共享內存。

S

這個是進程的狀態。它有以下不同的值:

D – 不可中斷的睡眠態。

R – 運行態

S – 睡眠態

T – 被跟蹤或已停止

Z – 殭屍態

I - 空閒狀態(idle)

%CPU

自從上一次更新時到現在任務所使用的CPU時間百分比。

%MEM

進程使用的可用物理內存百分比。

TIME+

任務啓動後到現在所使用的全部CPU時間,精確到百分之一秒。

COMMAND

運行進程所使用的命令。

還有許多在默認情況下不會顯示的輸出,它們可以顯示進程的頁錯誤、有效組和組ID和其他更多的信息。

進程id USER      PR  NI    VIRT    RES    SHR �  %CPU %MEM     TIME+ COMMAND     
 1590 kylechen  20   0 3974220 265424  72628 S   7.3  6.8   5:33.19 gnome-shell 
 1446 kylechen  20   0  521960  38412  19292 S   6.3  1.0   3:28.27 Xorg        
 3008 kylechen  20   0  780520  50972  32452 S   4.6  1.3   0:17.32 gnome-term+ 
 2779 kylechen  20   0 1201196 318344  79024 S   1.3  8.1  11:48.81 chrome      
 .......

實例

實例1:top

top - 21:25:55 up  1:27,  1 user,  load average: 1.51, 1.87, 1.49
任務: 305 total,   2 running, 250 sleeping,   0 stopped,   0 zombie
%Cpu(s): 22.7 us,  1.8 sy,  0.0 ni, 75.1 id,  0.1 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  3920116 total,   121880 free,  2859016 used,   939220 buff/cache
KiB Swap:   999420 total,   333328 free,   666092 used.   182088 avail Mem 

PID  USER      PR  NI    VIRT    RES    SHR � %CPU %MEM     TIME+ COMMAND      
 2779 kylechen  20   0 1191.7m 314.5m  59.2m S 17.1  8.2  20:45.14 chrome       
 1590 kylechen  20   0 3881.1m 242.1m  70.3m R  4.8  6.3   7:19.67 gnome-shell  
 1446 kylechen  20   0  444.6m  31.1m  11.8m S  1.3  0.8   4:42.48 Xorg         
 8711 kylechen  20   0  622.0m  17.4m   5.6m S  0.7  0.5   0:02.43 gnome-termi+ 
 1955 kylechen  20   0 1458.6m 348.2m 189.5m S  0.5  9.1   7:31.10 chrome       
 1989 kylechen  20   0  653.0m 112.1m  47.2m S  0.5  2.9   7:06.33 chrome       
 8736 kylechen  20   0   50.2m   1.5m   0.8m R  0.2  0.0   0:05.51 top          
 1036 gdm       20   0 3410.7m  82.2m  55.3m S  0.1  2.1   0:15.10 gnome-shell  
 1484 kylechen  20   0  442.8m  48.0m   8.9m S  0.1  1.3   0:40.19 fcitx        
 1993 kylechen  20   0  551.4m  48.9m  17.8m S  0.1  1.3   0:45.63 chrome       
 3299 kylechen  20   0  633.0m  20.9m   5.1m S  0.1  0.5   0:17.90 chrome       
    1 root      20   0  220.6m   3.0m   0.6m S  0.0  0.1   0:10.02 systemd      
    2 root      20   0    0.0m   0.0m   0.0m S  0.0  0.0   0:00.00 kthreadd     
    4 root       0 -20    0.0m   0.0m   0.0m I  0.0  0.0   0:00.00 kworker/0:0H 
    6 root       0 -20    0.0m   0.0m   0.0m I  0.0  0.0   0:00.00 mm_percpu_wq 
    7 root      20   0    0.0m   0.0m   0.0m S  0.0  0.0   0:00.22 ksoftirqd/0  
    8 root      20   0    0.0m   0.0m   0.0m I  0.0  0.0   0:11.86 rcu_sched  
實例2: 交互式命令

top是一個交互式的命令
所以用top調出動態顯示的進程狀態以後 
在界面上繼續用鍵盤輸入指令 
會繼續在界面上執行對應的操作


交互命令1:  回車/空格

top命令默認在一個特定間隔(3秒)後刷新顯示。
要手動刷新,用戶可以輸入回車或者空格。

交互命令2:   B
一些重要信息會以加粗字體顯示。
這個命令可以切換粗體顯示。


交互命令3:  d 或s
當按下’d’或’s’時,你
將被提示輸入一個值(以秒爲單位),
它會以設置的值作爲刷新間隔。
如果你這裏輸入了1,top將會每秒刷新。

交互命令4 :‘R’
切換反向/常規排序。

交互命令5 :‘V’
切換樹視圖。

交互命令6:  ‘k’
top命令中最重要的一個命令之一。
用於發送信號給任務(通常是結束任務)。


交互命令7:  ‘e’
切換顯示的單位
依次以k ->m->g->t->p單位選擇

我是陳同學
讓技術
有溫度

你的支持是我搬磚的動力

往期精彩回顧

你的微信消息是怎麼發出去的?

一個小時學會Git

Leetcode面試高頻題彙總--鏈表

Leetcode面試高頻題彙總--數組

【設計模式】可能是東半球最透徹的單例模式講解

 

點擊"閱讀原文" 獲取倉庫地址

聽說點擊在看的今年都會暴富脫單,升職加薪  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章