Linux中常用的監(jiān)控CPU整體性能的工具有:
mpstat: mpstat 不但能查看所有CPU的平均信息,還能查看指定CPU的信息。
vmstat:只能查看所有CPU的平均信息;查看cpu隊列信息;
iostat: 只能查看所有CPU的平均信息。
sar: 與mpstat 一樣,不但能查看CPU的平均信息,還能查看指定CPU的信息。
top:顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據(jù)用戶指定的時間來更新顯示。
oprofile:OProfile 是一個低開銷的系統(tǒng)全局的性能監(jiān)視工具。它使用處理器上的性能監(jiān)視硬件來檢索關(guān)于內(nèi)核以及系統(tǒng)上的可執(zhí)行文件的信息,例如內(nèi)存是何時被引用的;L2 緩存請求數(shù)量;收到的硬件中斷數(shù)量等
1. /proc/stat/
包含了所有CPU活動的信息,該文件中的所有值都是從系統(tǒng)啟動開始累計到當(dāng)前時刻。
|
輸出解釋
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每個參數(shù)意思(以第一行為例)為:
參數(shù) 解釋
user (432661) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,用戶態(tài)的CPU時間(單位:jiffies) ,不包含 nice值為負(fù)進程。1jiffies=0.01秒
nice (13295) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,nice值為負(fù)的進程所占用的CPU時間(單位:jiffies)
system (86656) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,核心時間(單位:jiffies)
idle (422145968) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,除硬盤IO等待時間以外其它等待時間(單位:jiffies)
iowait (171474) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,硬盤IO等待時間(單位:jiffies) ,
irq (233) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,硬中斷時間(單位:jiffies)
softirq (5346) 從系統(tǒng)啟動開始累計到當(dāng)前時刻,軟中斷時間(單位:jiffies)
CPU時間=user+system+nice+idle+iowait+irq+softirq
“intr”這行給出中斷的信息,第一個為自系統(tǒng)啟動以來,發(fā)生的所有的中斷的次數(shù);然后每個數(shù)對應(yīng)一個特定的中斷自系統(tǒng)啟動以來所發(fā)生的次數(shù)。
“ctxt”給出了自系統(tǒng)啟動以來CPU發(fā)生的上下文交換的次數(shù)。
“btime”給出了從系統(tǒng)啟動到現(xiàn)在為止的時間,單位為秒。
“processes (total_forks) 自系統(tǒng)啟動以來所創(chuàng)建的任務(wù)的個數(shù)目。
“procs_running”:當(dāng)前運行隊列的任務(wù)的數(shù)目。
“procs_blocked”:當(dāng)前被阻塞的任務(wù)的數(shù)目。
2. /proc/loadavg
該文件中的所有值都是從系統(tǒng)啟動開始累計到當(dāng)前時刻。該文件只給出了所有CPU的集合信息,不能該出每個CPU的信息。
[root@localhost ~]# cat /proc/loadavg
4.61 4.36 4.15 9/84 5662
每個值的含義為:
參數(shù) 解釋
lavg_1 (4.61) 1-分鐘平均負(fù)載
lavg_5 (4.36) 5-分鐘平均負(fù)載
lavg_15(4.15) 15-分鐘平均負(fù)載
nr_running (9) 在采樣時刻,運行隊列的任務(wù)的數(shù)目,與/proc/stat的procs_running表示相同意思
nr_threads (84) 在采樣時刻,系統(tǒng)中活躍的任務(wù)的個數(shù)(不包括運行已經(jīng)結(jié)束的任務(wù))
last_pid(5662) 最大的pid值,包括輕量級進程,即線程。
假設(shè)當(dāng)前有兩個CPU,則每個CPU的當(dāng)前任務(wù)數(shù)為4.61/2=2.31
3. uptime
uptime是Linux系統(tǒng)常用的命令,用來報告系統(tǒng)已經(jīng)運行多長時間,依此顯示的信息:現(xiàn)在時間,系統(tǒng)已經(jīng)運行了的時間,目前有多少登陸用戶, 1分鐘系統(tǒng)平均負(fù)載,5分鐘系統(tǒng)平均負(fù)載,15分鐘系統(tǒng)平均負(fù)載。該命令從/proc/loadavg 中獲得load average的信息。
范例1:系統(tǒng)只用一個CPU
[root@localhost ~]# uptime
12:20:49 up 3 days,9:20, 5 users, load average 1.10 1.32 1.15
對于一個CPU的系統(tǒng)來說,范例1中的平均負(fù)載高了些。通常來說:如果系統(tǒng)有n個CPU而且平均負(fù)載小于n,則說明某些CPU還有空閑的時間片。通過該命令,你能知道CPU是否繁忙,但是無法知道為什么忙。
4. mpstat
mpstat是Multiprocessor Statistics的縮寫,是實時系統(tǒng)監(jiān)控工具。其報告與CPU的一些統(tǒng)計信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。下面只介紹 mpstat與CPU相關(guān)的參數(shù),mpstat的語法如下:
mpstat [-P {|ALL}] [internal [count]]
參數(shù)的含義如下:
參數(shù) 解釋
-P {|ALL} 表示監(jiān)控哪個CPU, cpu在[0,cpu個數(shù)-1]中取值
internal 相鄰的兩次采樣的間隔時間
count 采樣的次數(shù),count只能和delay一起使用
當(dāng)沒有參數(shù)時,mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時,第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個interval時間段的平均信息。與CPU有關(guān)的輸出的含義如下:
參數(shù) 解釋 從/proc/stat獲得數(shù)據(jù)
CPU 處理器ID
user 在internal時間段里,用戶態(tài)的CPU時間(%) ,不包含 nice值為負(fù) 進程 usr/total*100
nice 在internal時間段里,nice值為負(fù)進程的CPU時間(%) nice/total*100
system 在internal時間段里,核心時間(%) 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
intr/s 在internal時間段里,每秒CPU接收的中斷的次數(shù) intr/total*100
CPU總的工作時間=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示當(dāng)前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數(shù)點。
范例1:average mode (粗略信息)
當(dāng)mpstat不帶參數(shù)時,輸出為從系統(tǒng)啟動以來的平均值。
|
范例2: 每2秒產(chǎn)生了4個處理器的統(tǒng)計數(shù)據(jù)報告
下面的命令可以每2秒產(chǎn)生了4個處理器的統(tǒng)計數(shù)據(jù)報告,一共產(chǎn)生三個interval 的信息,然后再給出這三個interval的平均信息。默認(rèn)時,輸出是按照CPU 號排序。第一個行給出了從系統(tǒng)引導(dǎo)以來的所有活躍數(shù)據(jù)。接下來每行對應(yīng)一個處理器的活躍狀態(tài)。。
|
范例3:比較帶參數(shù)和不帶參數(shù)的mpstat的結(jié)果。
在后臺開一個2G的文件
> cat 1.img —/* 1.img=2GBytes
然后在另一個終端運行mpstat命令
|
上兩表顯示出當(dāng)要正確反映系統(tǒng)的情況,需要正確使用命令的參數(shù)。vmstat 和iostat 也需要注意這一問題。
5. vmstat
vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計)的縮寫, 是實時系統(tǒng)監(jiān)控工具。該命令通過使用knlist子程序和/dev/kmen偽設(shè)備驅(qū)動器訪問這些數(shù)據(jù),輸出信息直接打印在屏幕。vmstat反饋的與CPU相關(guān)的信息包括:
(1)多少任務(wù)在運行
(2)CPU使用的情況
(3)CPU收到多少中斷
(4)發(fā)生多少上下文切換
下面只介紹 Vmstat與CPU相關(guān)的參數(shù)
vmstat的語法如下:
vmstat [delay [count]]
參數(shù)的含義如下:
參數(shù) 解釋
delay 相鄰的兩次采樣的間隔時間
count 采樣的次數(shù),count只能和delay一起使用
當(dāng)沒有參數(shù)時,vmstat則顯示系統(tǒng)啟動以后所有信息的平均值。有delay時,第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個delay時間段的平均信息。當(dāng)系統(tǒng)有多個CPU時,輸出為所有CPU的平均值。
與CPU有關(guān)的輸出的含義 (采用進一法)
參數(shù) 解釋 從/proc/stat獲得數(shù)據(jù)
任務(wù)的信息
r 在internal時間段里,運行隊列里等待CPU的任務(wù)(任務(wù))的個數(shù),即不包含vmstat進程 procs_running-1
b 在internal時間段里,被資源阻塞的任務(wù)數(shù)(I/0,頁面調(diào)度,等等.) ,通常情況下是接近0的 procs_blocked
CPU信息 所有值取整(四舍五入)
us 在internal時間段里,用戶態(tài)的CPU時間(%),包含 nice值為負(fù)進程 (user+nice)/total*100
sy 在internal時間段里,核心態(tài)的CPU時間(%) (system+irq+softirq)/total*100
id 在internal時間段里,cpu空閑的時間,不包括等待i/o的時間(%) idle/total*100
wa 在internal時間段里,等待i/o的時間(%) iowait/total*100
系統(tǒng)信息
in 在internal時間段里,每秒發(fā)生中斷的次數(shù) intr/interval
cs 在internal時間段里,每秒上下文切換的次數(shù),即每秒內(nèi)核任務(wù)交換的次數(shù) ctxt/interval
|
范例1:average mode (粗略信息)
當(dāng)vmstat不帶參數(shù)時,對應(yīng)的輸出值是從系統(tǒng)啟動以來的平均值,而r和b則對應(yīng)的是完成這一命令時,系統(tǒng)的值。從下面例子,可以看出系統(tǒng)基本出去閑置狀態(tài)(idle)。自啟動以來,CPU在用戶態(tài)消耗時間為5%,在核心態(tài)消耗為本1%,剩下的為閑置時間。需要指出的是:這里的用戶態(tài)時間包括nice值為負(fù)的進程的時間。
|
范例2:average mode (詳細信息)
命令格式:
vmstat –s
這里只討論與CPU相關(guān)信息。“CPU ticks”表示自系統(tǒng)啟動CPU運行時間,這里以tick為時間單位。用tick來西安市us,sy id 和wa的時間;forks指自從系統(tǒng)啟動以來,所創(chuàng)建的新任務(wù)的個數(shù)。這些信息從/proc/stat 的第一行和”processes”行獲得。
|
結(jié)果解釋
參數(shù) 描述 /proc/stat
non-nice user cpu ticks 自系統(tǒng)啟動以來,CPU在用戶態(tài)下運行非nice進程的時間,單位為jiffies user
nice user cpu ticks 自系統(tǒng)啟動以來,CPU在用戶態(tài)下運行nice進程的時間,單位為jiffies nice
system cpu ticks 自系統(tǒng)啟動以來,CPU處于系統(tǒng)狀態(tài)的時間,單位為jiffies sys
idle cpu ticks 自系統(tǒng)啟動以來,CPU處于閑置狀態(tài)的時間,單位為jiffies idle
IO-wait cpu ticks 自系統(tǒng)啟動以來,CPU處理IO中斷的時間,單位為jiffies iowait
IRQ cpu ticks 自系統(tǒng)啟動以來,CPU處理硬中斷的時間,單位為jiffies irq
softing cpu ticks 自系統(tǒng)啟動以來,CPU處理軟中斷的時間,單位為jiffies Softirq
interrupts 自系統(tǒng)啟動以來,發(fā)生的所有的中斷的次數(shù)目 Intr
CPU context switches 自系統(tǒng)啟動以來,發(fā)生的上下文交換的次數(shù) Ctxt
boot time 自系統(tǒng)啟動以來到現(xiàn)在運行的時間,單位為秒。 btime
forks 自系統(tǒng)啟動以來所創(chuàng)建的任務(wù)的個數(shù)目。 Process