效能監控指令vmstat

2021-12-29 20:12:05 字數 3741 閱讀 8814

監控通常分為機器監控和服務監控,機器監控是基礎監控,目的是為了獲得系統當前的執行狀態,服務監控則是主要目的,也是最應該關心的監控,機器監控也是為了更好的服務監控而存在,簡單來說,服務監控和系統上部署的具體服務有關,但監控模式可以統一。

監控是為了獲得相關的目標資料,獲得資料是為了異常情況下作出分析,分析的目的是為了解決線上case以及效能調優。這基本上就是監控存在的意義了。一台線上伺服器的機器監控,基本上可以分成四大類:cpu監控、磁碟容量監控、io監控和網絡卡監控。不同業務將會導致伺服器不同的瓶頸,應該視具體業務而言。本文主要討論linux下常見的獲得cpu狀態的命令列:vmstat。

在使用指令之前,應該明白監控的具體內容以及含義。cpu監控分為兩種:cpu使用率和ipc/cpi,兩者的應用場景也不相同,通常使用的是cpu使用率監控,基本上作業系統都會提供,而ipc/cpi監控則需要效能專家的協助,作業系統上基本沒有相關的指令。

非計算密集型只需要監控cpu的使用率,而cpu的使用率需要關注使用者態cpu使用率和系統態cpu使用率,前者表示系統上執行業務獲得cpu的執行時間佔總cpu時間的百分比,後者表示系統獲得cpu時間的百分比。對使用者而言,使用者態cpu百分比為100%是最理想的狀況,但這通常不可能,當出現程式排程、執行緒上下文切換以及io互動的時候,系統態cpu使用率會較多的增長。應當明確的是,應用消耗很多cpu並不意味著效能或者擴充套件性達到了最高或瓶頸。如果長時間出現系統態cpu使用率居高不下,那麼就需要關注,有可能是程式寫的不優雅,有可能是磁碟即將損壞導致io消耗時間過長,這時候就需要cpu監控從而分析得出結果。

對計算密集型應用來首,只監控cpu使用率是不夠的,還需要監控ipc(每時鐘指令數)或cpi(每指令時鐘週期)。為什麼需要知道這一項資料?ipc或cpi都可以反映了沒有指令被執行的時候占用cpu時鐘週期的百分比,簡而言之就是cpu等待指令從記憶體中裝入暫存器消耗時間的百分比,即停滯(stall)。停滯——當cpu執行指令而所用到的運算元不在暫存器或快取中並且當前鐘週期還未失效時,cpu就需要停滯等待資料從記憶體中裝入暫存器,停滯一旦發生,通常會浪費幾百個cpu時鐘週期。要想提高計算密集型應用的效能,就需要獲得ipc/cpi監控資料,減少停滯減少cpu等待記憶體資料時間或改善快取記憶體。

[work@localhost ~]$ vmstat --help

usage: vmstat [-v] [-n] [delay [count]]

-v prints version.

-n causes the headers not to be reprinted regularly.

-a print inactive/active page stats.

-d prints disk statistics

-d prints disk table

-p prints disk partition statistics

-s prints vm table

-m prints slabinfo

-t add timestamp to output

-s unit size

delay is the delay between updates in seconds.

unit size k:1000 k:1024 m:1000000 m:1048576 (default is k)

count is the number of updates.[work@localhost ~]$ vmstat 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 56400 43444 324868 0 0 20 14 28 45 0 0 99 1 0

0 0 0 56400 43452 324864 0 0 0 48 36 58 0 0 98 2 0

0 0 0 56400 43452 324868 0 0 0 0 22 34 0 0 100 0 0

0 0 0 56400 43452 324868 0 0 0 0 34 48 0 1 99 0 0

1 0 0 56400 43452 324868 0 0 0 0 22 31 0 1 99 0 0

0 0 0 56400 43452 324868 0 0 0 0 31 48 0 0 100 0 0

0 0 0 56400 43452 324868 0 0 0 0 129 163 3 1 96 0 0

0 0 0 56400 43452 324868 0 0 0 0 35 56 0 2 98 0 0

0 0 0 56400 43452 324868 0 0 0 0 22 32 0 0 100 0 0

0 0 0 56400 43452 324868 0 0 0 0 58 61 0 0 100 0 0

0 0 0 56400 43452 324868 0 0 0 0 24 38 0 1 99 0 0vmstat 1:表示每隔一秒鐘採集、展示一次資料,要想停下來ctrl+d即可,如果想指定採集次數,則使用「vmstat 1 10",表示每隔一秒鐘採集一次資料,總共採集10次。

r:表示除了cpu資源外已經準備好的程序佇列,即等待可用cpu的程序數,獲取該值用於判斷系統負荷情況,如果長時間該值超過處理器硬體執行緒個數一倍,則需要關注,系統可能面臨高負載狀況,如果長時間是處理器硬體執行緒數的

三、四倍,則需要立即關注並採取行動,此時系統已經能感覺到明顯的效能下降,要麼增加cpu,要麼分析當前系統程序狀況。

附註:硬體執行緒個數的概念,舉個例子,雙核四執行緒的cpu,表示有2個物理cpu,但是每個cpu有兩個邏輯上的執行緒,對作業系統而言,它認為有4個cpu。

b:表示阻塞的程序佇列,阻塞的時候程序還在記憶體(和掛起不一樣,注意區別),但是需要額外的資源(例如io)等。

us:表示使用者態cpu使用率,即應用獲得cpu執行時間占用cpu總時間的百分比,佔比高並不表示系統瓶頸。

sy:表示系統態cpu使用率,常指系統排程占用cpu總時間的百分比。

id:表示系統空閒時間百分比。

獲得這三項資料的目的是為了分析、減少sy的百分比,實際上要判斷導致應用異常需要綜合很多監控資料,具體靠經驗。

si:每秒從磁碟讀入虛存(swap)的大小,如果該值較大,則表示系統記憶體資源緊張,需要頻繁的進行記憶體交換。

so:每秒從記憶體寫入到虛存的大小,和si一致,但是要注意兩個值是配合使用,當兩個值都較大的時候才真正表示記憶體資源緊張。

bi:塊裝置(磁碟)每秒接收的塊數量,對應io中的寫操作,太大表示io操作頻繁。

bo:塊裝置每秒輸出的塊數量,對應io中的讀操作,太大表示io操作頻繁。

in:每秒cpu中斷次數。

cs:每秒上下文切換次數,例如呼叫系統函式、執行緒上下文切換、程序切換都會導致該值增大,上下文切換會浪費cpu時鐘,配合in值,因此如果該值長時間太大,就需要考慮應用中的執行緒數是否開啟太多等。

Linux效能監控 vmstat

r the number of processes waiting for run time.等待執行的程序數 b the number of processes in uninterruptible sleep.處在非中斷睡眠狀態的程序數 swpd the amount of virtual me...

mysql效能監控指令

qps queries per seconds 每秒鐘查詢數量 查詢所有的全域性狀態 show global status 查詢qps show global status like questions tps tranaction per seconds 每秒鐘事務數 tps com commit...

Linux效能監控工具集之vmstat命令

vmstat命令是linux下一款功能比較齊全的監測工具。它可以統計cpu 記憶體 swap i o操作 上下文切換 時鐘切換等的使用情況。vmstat可以指定取樣週期和取樣次數。舉個栗子使用vmstat進行資料採集,每秒鐘一次,共採集3次,命令為 vmstat 1 3。來看下執行結果 採集3次共3...