歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux性能監控指令vmstat

Linux性能監控指令vmstat

日期:2017/2/28 14:02:43   编辑:Linux教程

一、概述

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

監控是為了獲得相關的目標數據,獲得數據是為了異常情況下作出分析,分析的目的是為了解決線上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等待內存數據時間或改善高速緩存。

1. vmstat用法

[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.

2. vmstat示例

[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 0

3. vmstat詳解

vmstat 1:表示每隔一秒鐘采集、展示一次數據,要想停下來Ctrl+d即可,如果想指定采集次數,則使用“vmstat 1 10",表示每隔一秒鐘采集一次數據,總共采集10次。

procs:

r:表示除了cpu資源外已經准備好的進程隊列,即等待可用cpu的進程數,獲取該值用於判斷系統負荷情況,如果長時間該值超過處理器硬件線程個數一倍,則需要關注,系統可能面臨高負載狀況,如果長時間是處理器硬件線程數的三、四倍,則需要立即關注並采取行動,此時系統已經能感覺到明顯的性能下降,要麼增加cpu,要麼分析當前系統進程狀況。

附注:硬件線程個數的概念,舉個例子,雙核四線程的cpu,表示有2個物理cpu,但是每個cpu有兩個邏輯上的線程,對操作系統而言,它認為有4個cpu。

b:表示阻塞的進程隊列,阻塞的時候進程還在內存(和掛起不一樣,注意區別),但是需要額外的資源(例如IO)等。

cpu:

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

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

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

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

swap:

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

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

io:

bi:塊設備(磁盤)每秒接收的塊數量,對應IO中的寫操作,太大表示IO操作頻繁。

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

system:

in:每秒cpu中斷次數。

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

附注:

本文如有錯漏,煩請不吝指正,謝謝!

Linux vmstat 命令詳解 http://www.linuxidc.com/Linux/2013-03/80983.htm

Linux下vmstat 顯示結果詳解 http://www.linuxidc.com/Linux/2013-01/77497.htm

Linux監控工具之vmstat 詳解 http://www.linuxidc.com/Linux/2012-09/71295.htm

Linux vmstat命令實戰詳解 http://www.linuxidc.com/Linux/2012-06/61771.htm

Linux vmstat監控系統負載 http://www.linuxidc.com/Linux/2012-01/51340.htm

vmstat命令詳解——Linux性能分析 http://www.linuxidc.com/Linux/2014-06/102884.htm

Copyright © Linux教程網 All Rights Reserved