Linux性能監控(CPU監控)
主要分爲四類:
cup監控
內存監控命令
IO性能
網絡性能
cup監控
關於CPU,有3個重要的概念:上下文切換(context switchs),運行隊列(Run queue)和使用率(utilization)。
上下文切換:
目前流行的CPU在同一時間內只能運行一個線程,超線程的處理器可以在同一時間運行多個線程(包括多核CPU),Linux內核會把多核的處理器當作多個單獨的CPU來識別。
一個標準的Linux內核何以支持運行50~50000個進程運行,對於普通的CPU,內核會調度和執行這些進程。每個進程都會分到CPU的時間片來運行,當一個進程用完時間片或者被更高優先級的進程搶佔後,它會備份到CPU的運行隊列中,同時其他進程在CPU上運行。這個進程切換的過程被稱作上下文切換。過多的上下文切換
會造成系統很大的開銷。
運行隊列:
每個CPU都會維持一個運行隊列,理想情況下,調度器會不斷讓隊列中的進程運行。進程不是處在sleep狀態就是run able狀態。如果CPU過載,就會出現調度器跟不上系統的要求,導致可運行的進程會填滿隊列。隊列愈大,程序執行時間就愈長。“load”用來表示運行隊列,用top 命令我們可以看到CPU一分鐘,5分鐘和15分鐘內的運行隊列的大小。這個值越大表明系統負荷越大。
CPU使用率:
CPU使用率可分爲一下幾個部分
User Time—執行用戶進程的時間百分比;
System Time—執行內核進程和中斷的時間百分比;
Wait IO—因爲IO等待而使CPU處於idle狀態的時間百分比;
Idle—CPU處於Idle狀態的時間百分比。
以下是一些對於CPU很普遍的性能要求:
- 對於每一個CPU來說運行隊列不要超過3,例如,如果是雙核CPU就不要超過6;
- 如果CPU在滿負荷運行,應該符合下列分佈,
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5% - 對於上下文切換要結合CPU使用率來看,如果CPU使用滿足上述分佈,大量的上下文切換也是可以接受的。
top命令
TOP是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨佔前臺,直到用戶終止該程序爲止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定製文件中進行設定。
前五行是統計信息:
1、第一行是任務隊列信息,同uptime命令的執行結果一樣
其內容如下:
09:57:07 當前時間
up 3 min 系統運行時間
1 user 當前登錄用戶數
load average: 0.06, 0.20, 0.11 系統負載,即任務隊列的平均長度。分別爲1分鐘,5分鐘,15分鐘前到現在的平均值。
2、第二行爲進程信息統計數據
Tasks — 任務(進程)
otal 進程總數
running 正在運行的進程數
sleeping 睡眠的進程數
stopped 停止的進程數
zombie 殭屍進程數
3、第三行CPU信息統計數據:
Cpu(s):
0.0% us: 用戶空間佔用CPU百分比
0.3% sy: 內核(系統)空間佔用CPU百分比
0.0% ni: 用戶進程空間內改變過優先級的進程佔用CPU百分比
99.7% id: 空閒CPU百分比
0.0% wa: 等待輸入輸出的CPU時間百分比
0.0%hi: 硬件CPU中斷佔用百分比
0.0%si: 軟中斷佔用百分比
0.0%st: 虛擬機(虛擬化技術)佔用百分比
4、第四、五行爲內存信息系統數據:
Men:
995896k total: 物理內存總量
296288k used: 使用的物理內存總量
511352k free: 空閒內存總量
188256k buffers: 用作內核緩存的內存量
Swap:
0k total: 交換區總量
0k used: 使用的交換區總量
0k free: 空閒交換區總量
518440k cached:緩衝的交換區總量(內存中的數據被移動至交換區而後又被送至內存空間,但是使用過的交換區尚未被覆蓋,其空間大小即爲這些數據已存在於內存中的交換區的大小,相應的內存再次被換出時可不必再次對交換區寫入)
內存空間還剩多少空閒呢?
totalfree = total 995896 - free 511352 + buffer 188256 + cached 518440 (即:物理空閒內存 = 總物理內存 - 空閒內存總量 + 內核緩存的內存量 + 緩衝的交換區總量)
vmstat命令
安裝:
CentOS, RedHat or Fedora,運行下列命令來安裝mpstat
yum install sysstat
Debian, Ubuntu or 它的衍生版, 運行下列命令來安裝mpstat
apt-get install sysstat
vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。
輸出的參數信息含義:
procs #進程
r(run):表示運行或等待CPU時間片的進程數,如果該值長期大於服務器CPU的個數,則說明CPU資源不足。一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險;
b(block):表示等待資源的進程數,這個資源指的是I/O、內存等。比如,當磁盤讀寫非常頻繁時,寫數據就會變得很慢,此時CPU運算很快就結束了,但進程需要把計算的結果寫入磁盤,這樣進程的任務纔算完成,此時這個進程只能慢慢地等待磁盤了,這個進程就是這個b狀態。該數值如果長時間大於1,則需要去查找問題;
memory #內存,單位:KB
swap:虛擬內存(swap空間)已使用的大小;
free:空閒的物理內存的大小;
buff:存放目錄裏面有什麼內容,文件的屬性以及權限等;
cache:用來記憶我們打開過的文件和程序,做文件緩衝(當程序使用內存時,buff/cache很快就會被使用);
swap #swap空間,單位:KB,內存夠用時,si和so值都爲0,如果這兩個值長期大於0,表示內存不夠用了,系統性能會受到影響
si:表示從swap空間寫入內存的數據量;
so:表示從內存寫入swap空間的數據庫;
io #單位:塊/秒
bi:每秒讀取的塊數(讀磁盤),現在的Linux版本塊的大小爲1024bytes;
bo:每秒寫入的塊數(寫磁盤);
system #系統,這2個值越大,會看到由內核消耗的CPU時間會越大
in:每秒CPU的中斷次數,包括時間中斷;
cs:每秒上下文切換數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進行上下文切換,這個值越小越好;
cpu #以百分比顯示
us(user time):用戶進程執行時間;
sy(system time):系統進程執行時間;
id:空閒時間(包括IO等待時間);
wa:等待IO時間,wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量做隨機訪問造成的,也有可能是磁盤出現瓶頸;
st:表示被偷走的CPU所佔百分比(一般都爲0,不用關注);
us + sy + id + wa =100% #這個是隻是近似值
語法
vmstat (選項) (參數)
示例
一般vmstat工具的使用是通過兩個數字參數來完成的,
第一個參數是採樣的時間間隔,單位是秒,
第二個參數是採樣的次數.
例如每隔1秒採樣,共採樣3次:
mpstat命令
mpstat是 Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPU系統裏,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。
安裝:
CentOS, RedHat or Fedora,運行下列命令來安裝mpstat
yum install sysstat
Debian, Ubuntu or 它的衍生版, 運行下列命令來安裝mpstat
apt-get install sysstat
語法:
mpstat [-P {cpu|ALL}] [internal [count]]
參數說明:
-P {cpu l ALL}:表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
internal:相鄰的兩次採樣的間隔時間
count:採樣的次數,count只能和delay一起使用
示例:
mpstat -P ALL 1 3
表示每1秒產生一個報告,總共產生3個。
輸出的參數信息含義:
參數 | 釋義 | 從/proc/stat獲得數據 |
---|---|---|
CPU | 處理器號碼。關鍵字ALL表示統計數據是以所有處理器之間的平均值計算的 | |
%usr | 在internal時間段裏,用戶態的CPU時間(%),不包含 nice值爲負進程 | usr/total*100 |
%nice | 在internal時間段裏,nice值爲負進程的CPU時間(%) | nice/total*100 |
%sys | 在internal時間段裏,核心時間(%) | system/total*100 |
%iowait | 在internal時間段裏,硬盤IO等待時間(%) | iowait/total*100 |
%irq | 在internal時間段裏,硬中斷時間(%) | irq/total*100 |
%soft | 在internal時間段裏,軟中斷時間(%) | softirq/total*100 |
%steal | 顯示虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比 | steal/total*100 |
%guest | 顯示運行虛擬處理器時CPU花費時間的百分比 | guest/total*100 |
%gnice | gnice/total*100 | |
%idle | 在internal時間段裏,CPU除去等待磁盤IO操作外的因爲任何原因而空閒的時間閒置時間(%) | idle/total*100 |
pidstat命令
pidstat是sysstat工具的一個命令,用於監控全部或指定進程的cpu、內存、線程、設備IO等系統資源的佔用情況。pidstat首次運行時顯示自系統啓動開始的各項統計信息,之後運行pidstat將顯示自上次運行該命令以後的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
語法:
pidstat [ 選項 ] [ <時間間隔> ] [ <次數> ]
示例:
pidstat
默認顯示了所有進程的cpu使用率。
輸出的參數信息含義:
PID:進程ID
%usr:進程在用戶空間佔用cpu的百分比
%system:進程在內核空間佔用cpu的百分比
%guest:進程在虛擬機佔用cpu的百分比
%CPU:進程佔用cpu的百分比
CPU:處理進程的cpu編號
Command:當前進程對應的命令
pidstat -u:cpu使用情況統計,和直接運行pidstat
pidstat -r:內存使用情況統計
輸出的參數信息含義:
PID:進程標識符
Minflt/s:任務每秒發生的次要錯誤,不需要從磁盤中加載頁
Majflt/s:任務每秒發生的主要錯誤,需要從磁盤中加載頁
VSZ:虛擬地址大小,虛擬內存的使用KB
RSS:常駐集合大小,非交換區五里內存使用KB
Command:task命令名
pidstat -d:顯示各個進程的IO使用情況
輸出的參數信息含義:
PID:進程id
kB_rd/s:每秒從磁盤讀取的KB
kB_wr/s:每秒寫入磁盤KB
kB_ccwr/s:任務取消的寫入磁盤的KB。當任務截斷髒的pagecache的時候會發生。
COMMAND:task的命令名
dstat命令
dstat命令可以收集cpu、disk、net、system、內存、進程等系統信息;功能比vmstat強大,一條命令可以集成了uptime、vmstat、top等相關信息
安裝:
CentOS, RedHat or Fedora,運行下列命令來安裝
yum install -y dstat
Debian, Ubuntu or 它的衍生版, 運行下列命令來安裝
apt-get install dstat
示例:
dstat
輸出的參數信息含義:
顯示CPU(cpu)、硬盤(disk)、網卡(network)、包(package)、系統(system)
usr:用戶佔用 sys:系統佔用 idl:空閒 wai:等待的進程 hiq:硬中斷 siq:軟中斷
read:磁盤讀操作數 writ:磁盤寫操作數
recv:接受請求數 send:發送請求數
in:系統分頁 out:系統分頁
int:系統中斷次數 csw:上下文切換次數
dstat -c: 顯示系統整體的cpu情況
dstat -d: 查看系統的磁盤的讀寫數據大小
dstat -n: 查看系統的網絡狀態
dstat -l : 查看系統的負載情況
dstat -m: 查看系統的內存信息
dstat -p: 查看系統的進程信息
dstat -r : 查看系統的I/O請求情況
dstat --socket: 查看系統的tcp,udp端口情況
nmon命令
Nmon (Nigel’s Monitor)是由IBM 提供、免費監控 AIX 系統與 Linux 系統資源的工具。該工具可將服務器系統資源耗用情況收集起來並輸出一個特定的文件,並可利用 excel 分析工具(nmon analyser)進行數據的統計分析。
安裝
CentOS, RedHat or Fedora,運行下列命令來安裝
yum install -y nmon
Debian, Ubuntu or 它的衍生版, 運行下列命令來安裝
apt-get install nmon
常用快捷鍵:
參數 作用
q 停止並退出 Nmon
h 查看幫助
c 查看 CPU 統計數據
m 查看內存統計數據
k 查看內核統計數據
n 查看網絡統計數據
N 查看 NFS 統計數據
j 查看文件系統統計數據
t 查看高耗進程
V 查看虛擬內存統計數據
v 詳細模式
查看 CPU 處理器
如果你想收集關於 CPU 性能相關的統計數據,你應該按下鍵盤上的c鍵,之後你將會看到下面的輸出:
查看高耗進程統計數據
如果想收集系統正在運行的高耗進程的統計數據,按鍵盤上的t鍵,之後你將會看到下面的輸出:
查看網絡統計數據
如果想收集 Linux 系統的網絡統計數據,按下n鍵,你將會看到下面輸出:
硬盤 I/O 圖表
使用d 鍵獲取硬盤相關的信息,你會看到下面輸出:
查看內核信息
Nmon 一個非常重要的快捷鍵是k鍵,用來顯示系統內核相關的概要信息。按下k鍵之後,會看到下面輸出:
獲取系統信息
對每個系統管理員來說一個非常有用的快捷鍵是r鍵,可以用來顯示計算機的系統結構、操作系統版本號和 CPU 等不同資源的信息。按下r鍵之後會看到下面輸出: