1. 程式人生 > 實用技巧 >Linux效能檢測常用的基本命令

Linux效能檢測常用的基本命令

一、uptime

$ uptime
 19:08:17 up 127 days,  3:00,  1 user,  load average: 0.00, 0.01, 0.05     

命令返回的資訊:

  • 19:08:17 //系統當前時間
  • up 127 days, 3:00 //主機已執行時間,時間越大,說明你的機器越穩定
  • 1 user // 使用者連線數,是總連線數而不是使用者數
  • load average: 0.00, 0.01, 0.05 // 系統平均負載,統計最近1,5,15分鐘的系統平均負載

二、 dmesg

dmesg命令被用於檢查和控制核心的環形緩衝區。kernel會將開機資訊儲存在ring buffer中。您若是開機時來不及檢視資訊,可利用dmesg來檢視。開機資訊儲存在/var/log/dmesg檔案裡。

常用選項:
-c:顯示資訊後,清除ring buffer中的內容;
-s<緩衝區大小>:預設定為8196,剛好等於ring buffer的大小;
-n:設定記錄資訊的層級。

三、vmstat

vmstat命令的含義為顯示虛擬記憶體狀態(“Virtual Memory Statistics”),但是它可以報告關於程序、記憶體、I/O等系統整體執行狀態。

常用選項:
-a:顯示活動內頁;
-f:顯示啟動後建立的程序總數;
-m:顯示slab資訊;
-n:頭資訊僅顯示一次;
-s:以表格方式顯示事件計數器和記憶體狀態;
-d:報告磁碟狀態;
-p:顯示指定的硬碟分割槽狀態;
-S:輸出資訊的單位;

$ vmstat 10 3           表示每行列印10秒內的平均值,只打印3次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 711396   2108 184456    0    0    22     4   53   81  0  0 99  0  0
 0  0      0 711372   2108 184456    0    0     0     0   39   36  0  0 100  0  0
 0  0      0 711372   2108 184456    0    0     0     0   39   35  0  0 100  0  0

輸出的資訊:
procs(程序)

  • r: 執行佇列中程序數量,這個值也可以判斷是否需要增加CPU。(長期大於1);
  • b: 等待IO的程序數量;

memory(記憶體)

  • swpd: 使用虛擬記憶體大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能;
  • free: 空閒實體記憶體大小;
  • buff: 用作緩衝的記憶體大小;
  • cache: 用作快取的記憶體大小,如果cache的值大的時候,說明cache處的檔案數多,如果頻繁訪問到的檔案都能被cache處,那麼磁碟的讀IO bi會非常小;

swap(交換分割槽)

  • si: 每秒從交換區寫到記憶體的大小,由磁碟調入記憶體;
  • so: 每秒寫入交換區的記憶體大小,由記憶體調入磁碟;
    注意:記憶體夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁碟IO和CPU資源都會被消耗。有些朋友看到空閒記憶體(free)很少的或接近於0時,就認為記憶體不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。

io(現在的Linux版本塊的大小為1kb)

  • bi: 每秒讀取的塊數;
  • bo: 每秒寫入的塊數;
    注意:隨機磁碟讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。

system(系統)

  • in: 每秒中斷數,包括時鐘中斷;
  • cs: 每秒上下文切換數;
    注意:上面2個值越大,會看到由核心消耗的CPU時間會越大。

cpu(以百分比表示)

  • us: 使用者程序執行時間百分比;
    us的值比較高時,說明使用者程序消耗的CPU時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程式演算法或者進行加速。
  • sy: 核心系統程序執行時間百分比;
    sy的值高時,說明系統核心消耗的CPU資源多,這並不是良性表現,我們應該檢查原因。
  • wa: IO等待時間百分比
    wa的值高時,說明IO等待比較嚴重,這可能由於磁碟大量作隨機訪問造成,也有可能磁碟出現瓶頸(塊操作)。
  • id: 空閒時間百分比

四、mpstat

mpstat命令指令主要用於多CPU環境下,它顯示各個可用CPU的狀態資訊。這些資訊存放在/proc/stat檔案中。在多CPUs系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。

$ mpstat            #輸出從系統啟動以來的平均值
$ mpstat -P ALL 2 3
#每2秒產生了2個處理器的統計資料報告,一共產生三個interval 的資訊,然後再給出這三個interval的平均資訊。預設時,輸出是按照CPU 號排序。第一個行給出了從系統引導以來的所有活躍資料。接下來每行對應一個處理器的活躍狀態。

五、pidstat

pidstat用於列印各個程序對CPU的佔用情況,類似top命令中顯示的內容。pidstat的優勢在於,可以滾動的列印程序執行情況,而不像top那樣會清屏。

$ pidstat 1
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_  (2 CPU)

20時19分43秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
20時19分44秒     0       495    0.00    0.99    0.00    0.99     0  kworker/0:3
20時19分44秒     0      1038    0.00    0.99    0.00    0.99     1  dockerd
20時19分44秒     0      2308    0.99    0.00    0.00    0.99     1  consul
20時19分44秒     0      2422    0.00    1.98    0.00    1.98     0  pidstat

20時19分44秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
20時19分45秒     0        44    0.00    1.00    0.00    1.00     1  kworker/u256:1
20時19分45秒     0      2308    1.00    0.00    0.00    1.00     1  consul
20時19分45秒     0      2422    1.00    3.00    0.00    4.00     0  pidstat

六、iostat

iostat命令被用於監視系統輸入輸出裝置和CPU的使用情況。它的特點是彙報磁碟活動統計情況,同時也會彙報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個程序進行深入分析,僅對系統的整體情況進行分析。

常用選項:
-c:僅顯示CPU使用情況;
-d:僅顯示裝置利用率;
-k:顯示狀態以千位元組每秒為單位,而不使用塊每秒;
-m:顯示狀態以兆位元組每秒為單位;
-p:僅顯示塊裝置和所有被使用的其他分割槽的狀態;
-t:顯示每個報告產生時的時間;
-V:顯示版號並退出;
-x:顯示擴充套件狀態。

$  iostat -x /dev/sda1   #磁碟I/O的詳細情況
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	
2020年03月09日 	_x86_64_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.57    0.00    1.49    0.05    0.00   97.88

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda1              0.00     0.00    3.57    0.01    45.12     3.75    27.33     0.00    0.09    0.09    1.25   0.08   0.03

詳細說明:第二行是系統資訊和監測時間,第三行和第四行顯示CPU使用情況(具體內容和mpstat命令相同)。這裡主要關注後面I/O輸出的資訊,如下所示:

  • Device:監測裝置名稱
  • rrqm/s:每秒需要讀取需求的數量
  • wrqm/s:每秒需要寫入需求的數量
  • r/s:每秒實際讀取需求的數量
  • w/s:每秒實際寫入需求的數量
  • rsec/s:每秒讀取區段的數量
  • wsec/s:每秒寫入區段的數量
  • rkB/s:每秒實際讀取的大小,單位為KB
  • wkB/s:每秒實際寫入的大小,單位為KB
  • avgrq-sz:需求的平均大小區段
  • avgqu-sz:需求的平均佇列長度
  • await:等待I/O平均的時間(milliseconds)
  • svctm:I/O需求完成的平均時間
  • %util:被I/O需求消耗的CPU百分比

七、free

free命令可以顯示當前系統未使用的和已使用的記憶體數目,還可以顯示被核心使用的記憶體緩衝區。

常用選項:
-b:以Byte為單位顯示記憶體使用情況;
-k:以KB為單位顯示記憶體使用情況;
-m:以MB為單位顯示記憶體使用情況;
-o:不顯示緩衝區調節列;
-s<間隔秒數>:持續觀察記憶體使用狀況;
-t:顯示記憶體總和列;
-V:顯示版本資訊。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1821         422         845          10         554        1164
Swap:          2047           0        2047

返回資訊:
total:記憶體總數;
used:已經使用的記憶體數;
free:空閒的記憶體數;
shared:當前已經廢棄不用;
buffers Buffer:快取記憶體數;
available 還可以被 應用程式 使用的實體記憶體大小;

八、sar

sar命令是Linux下系統執行狀態統計工具,它將指定的作業系統狀態計數器顯示到標準輸出裝置。sar工具將對系統當前的狀態進行取樣,然後通過計算資料和比例來表達系統的當前執行狀態。它的特點是可以連續對系統取樣,獲得大量的取樣資料。取樣資料和分析的結果都可以存入檔案,使用它時消耗的系統資源很小。

常用選項:
-A:顯示所有的報告資訊;
-b:顯示I/O速率;
-B:顯示換頁狀態;
-c:顯示程序建立活動;
-d:顯示每個塊裝置的狀態;
-e:設定顯示報告的結束時間;
-f:從指定檔案提取報告;
-i:設狀態資訊重新整理的間隔時間;
-P:報告每個CPU的狀態;
-R:顯示記憶體狀態;
-u:顯示CPU利用率;
-v:顯示索引節點,檔案和其他核心表的狀態;
-w:顯示交換分割槽狀態;
-x:顯示給定程序的狀態;

$ sar -n DEV 1
#-n DEV 1:每秒統計一次網路的使用情況
#-n EDEV 1:每秒統計一次錯誤的網路資訊
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_	(2 CPU)

20時46分45秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
20時46分46秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒     ens33      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒 vethfd45d02      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒 docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20時46分46秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

返回資訊:
IFACE ,網路介面名稱;
rxpck/s ,每秒接收到包數;
txpck/s ,每秒傳輸的報數;(transmit packages)
rxkB/s ,每秒接收的千位元組數;
txkB/s ,每秒傳送的千位元組數;
rxcmp/s ,每秒接收的壓縮包的數量;
txcmp/s ,每秒傳送的壓縮包的數量;
rxmcst/s,每秒接收的組資料包數量;

$ sar -n TCP,ETCP 1
#TCP, 報告關於TCPv4網路流量的統計資訊;
#ETCP, 報告有關TCPv4網路錯誤的統計資訊;
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_	(2 CPU)

20時49分44秒  active/s passive/s    iseg/s    oseg/s
20時49分45秒      0.00      0.00      0.00      0.00

返回資訊:
active/s:發起的網路連線數量;
passive/s:接收的網路連線數量;
retrans/s:重傳的數量;

九、top

top命令可以實時動態地檢視系統的整體執行情況,是一個綜合了多方資訊監測系統性能和執行資訊的實用工具。通過top命令所提供的互動式介面,用熱鍵可以管理。

常用選項:
-b:以批處理模式操作;
-c:顯示完整的治命令;
-d:螢幕重新整理間隔時間;
-I:忽略失效過程;
-s:保密模式;
-S:累積模式;
-i<時間>:設定間隔時間;
-u<使用者名稱>:指定使用者名稱;
-p<程序號>:指定程序;
-n<次數>:迴圈顯示的次數;


top互動命令:
h:顯示幫助畫面,給出一些簡短的命令總結說明;
k:終止一個程序;
i:忽略閒置和僵死程序,這是一個開關式命令;
q:退出程式;
r:重新安排一個程序的優先級別;
S:切換到累計模式;
s:改變兩次重新整理之間的延遲時間(單位為s),如果有小數,就換算成ms。輸入0值則系統將不斷重新整理,預設值是5s;
f或者F:從當前顯示中新增或者刪除專案;
o或者O:改變顯示專案的順序;
l:切換顯示平均負載和啟動時間資訊;
m:切換顯示記憶體資訊;
t:切換顯示程序和CPU狀態資訊;
c:切換顯示命令名稱和完整命令列;
M:根據駐留記憶體大小進行排序;
P:根據CPU使用百分比大小進行排序;
T:根據時間/累計時間進行排序;
w:將當前設定寫入~/.toprc檔案中;

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

返回資訊:

  • top - 09:44:56[當前系統時間],
  • 16 days[系統已經運行了16天],
  • 1 user[個使用者當前登入],
  • load average: 9.59, 4.75, 1.92[系統負載,即任務佇列的平均長度]
  • Tasks: 145 total[總程序數],
  • 2 running[正在執行的程序數],
  • 143 sleeping[睡眠的程序數],
  • 0 stopped[停止的程序數],
  • 0 zombie[凍結程序數],
  • Cpu(s): 99.8%us[使用者空間佔用CPU百分比],
  • 0.1%sy[核心空間佔用CPU百分比],
  • 0.0%ni[使用者程序空間內改變過優先順序的程序佔用CPU百分比],
  • 0.2%id[空閒CPU百分比], 0.0%wa[等待輸入輸出的CPU時間百分比],
  • 0.0%hi[],
  • 0.0%st[],
  • Mem: 4147888k total[實體記憶體總量],
  • 2493092k used[使用的實體記憶體總量],
  • 1654796k free[空閒記憶體總量],
  • 158188k buffers[用作核心快取的記憶體量]
  • Swap: 5144568k total[交換區總量],
  • 56k used[使用的交換區總量],
  • 5144512k free[空閒交換區總量],
  • 2013180k cached[緩衝的交換區總量],