centos 查看CPU運行情況


衡量CPU性能的指標:

1,用戶使用CPU的情況;

CPU運行常規用戶進程

CPU運行niced process

CPU運行實時進程

2,系統使用CPU情況;

用於I/O管理:中斷和驅動

用於內存管理:頁面交換

用戶進程管理:進程開始和上下文切換

3,WIO:用於進程等待磁盤I/O而使CPU處於空閑狀態的比率。

4,CPU的空閑率,除了上面的WIO以外的空閑時間

5,CPU用於上下文交換的比率

6,nice

7,real-time

8,運行進程隊列的長度

9,平均負載

Linux中常用的監控CPU整體性能的工具有:

§ mpstat: mpstat 不但能查看所有CPU的平均信息,還能查看指定CPU的信息。

§ vmstat:只能查看所有CPU的平均信息;查看cpu隊列信息;

§ iostat: 只能查看所有CPU的平均信息。

§ sar: 與mpstat 一樣,不但能查看CPU的平均信息,還能查看指定CPU的信息。

§ top:顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據用戶指定的時間來更新顯示。

一,vmstat

[root@localhost ~]#vmstat -n 3 (每個3秒刷新一次)

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

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

10 144 186164 105252 2386848 0 0 18 166 83 2 48 21 31 0

20 144 189620 105252 2386848 0 0 0 177 1039 1210 34 10 56 0

00 144 214324 105252 2386848 0 0 0 10 1071 670 32 5 63 0

00 144 202212 105252 2386848 0 0 0 189 1035 558 20 3 77 0

20 144 158772 105252 2386848 0 0 0 203 1065 2832 70 14 15 0

紅色內容標示CPU相關的參數

PROC(ESSES)

--r:如果在processes中運行的序列(process r)是連續的大於在系統中的CPU的個數表示系統現在運行比較慢,有多數的進程等待CPU.

如果r的輸出數大於系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率過低,系統中有多數的進程在等待CPU,造成系統中進程運行過慢.

SYSTEM

--in:每秒產生的中斷次數

--cs:每秒產生的上下文切換次數

上面2個值越大,會看到由內核消耗的CPU時間會越大

CPU

-us:用戶進程消耗的CPU時間百分

us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優化程序算法或者進行加速(比如PHP/PERL)

-sy:內核進程消耗的CPU時間百分比(sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因)

-wa:IO等待消耗的CPU時間百分比

wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)。

-id:CPU處於空閑狀態時間百分比,如果空閑時間(cpu id)持續為0並且系統時間(cpu sy)是用戶時間的兩倍(cpu us) 系統則面臨着CPU資源的短缺.

解決辦法:

當發生以上問題的時候請先調整應用程序對CPU的占用情況.使得應用程序能夠更有效的使用CPU.同時可以考慮增加更多的CPU. 關於CPU的使用情況還可以結合mpstat, ps aux top prstat –a等等一些相應的命令來綜合考慮關於具體的CPU的使用情況,和那些進程在占用大量的CPU時間.一般情況下,應用程序的問題會比較大一些.比如一些SQL語句不合理等等都會造成這樣的現象.

二,sar

sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 兩個參數組合起來定義采樣間隔和次數,t為采樣間隔,是必須有

的參數,n為采樣次數,是可選的,默認值是1,-o file表示將命令結果以二進制格式

存放在文件中,file 在此處不是關鍵字,是文件名。options 為命令行選項,sar命令

的選項很多,下面只列出常用選項:

-A:所有報告的總和。

-u:CPU利用率

-v:進程、I節點、文件和鎖表狀態。

-d:硬盤使用報告。

-r:內存和交換空間的使用統計。

-g:串口I/O的情況。

-b:緩沖區使用情況。

-a:文件讀寫情況。

-c:系統調用情況。

-q:報告隊列長度和系統平均負載

-R:進程的活動情況。

-y:終端設備活動情況。

-w:系統交換活動。

-x { pid | SELF | ALL }:報告指定進程ID的統計信息,SELF關鍵字是sar進程本身的統計,ALL關鍵字是所有系統進程的統計。

用sar進行CPU利用率的分析

sar -u 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009

07:40:17 PM CPU %user %nice %system %iowait %steal %idle

07:40:19 PM all 12.44 0.00 6.97 1.74 0.00 78.86

07:40:21 PM all 26.75 0.00 12.50 16.00 0.00 44.75

07:40:23 PM all 16.96 0.00 7.98 0.00 0.00 75.06

07:40:25 PM all 22.50 0.00 7.00 3.25 0.00 67.25

07:40:27 PM all 7.25 0.00 2.75 2.50 0.00 87.50

07:40:29 PM all 20.05 0.00 8.56 2.93 0.00 68.46

07:40:31 PM all 13.97 0.00 6.23 3.49 0.00 76.31

07:40:33 PM all 8.25 0.00 0.75 3.50 0.00 87.50

07:40:35 PM all 13.25 0.00 5.75 4.00 0.00 77.00

07:40:37 PM all 10.03 0.00 0.50 2.51 0.00 86.97

Average: all 15.15 0.00 5.91 3.99 0.00 74.95

在顯示內容包括:

%user:CPU處在用戶模式下的時間百分比。

%nice:CPU處在帶NICE值的用戶模式下的時間百分比。

%system:CPU處在系統模式下的時間百分比。

%iowait:CPU等待輸入輸出完成時間的百分比。

%steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。

%idle:CPU空閑時間百分比。

在所有的顯示中,我們應主要注意%iowait和%idle,%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續低於10,那么系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。

用sar進行運行進程隊列長度分析:

sar -q 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009

07:58:14 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15

07:58:16 PM 0 493 0.64 0.56 0.49

07:58:18 PM 1 491 0.64 0.56 0.49

07:58:20 PM 1 488 0.59 0.55 0.49

07:58:22 PM 0 487 0.59 0.55 0.49

07:58:24 PM 0 485 0.59 0.55 0.49

07:58:26 PM 1 483 0.78 0.59 0.50

07:58:28 PM 0 481 0.78 0.59 0.50

07:58:30 PM 1 480 0.72 0.58 0.50

07:58:32 PM 0 477 0.72 0.58 0.50

07:58:34 PM 0 474 0.72 0.58 0.50

Average: 0 484 0.68 0.57 0.49

runq-sz 准備運行的進程運行隊列。

plist-sz 進程隊列里的進程和線程的數量

ldavg-1 前一分鍾的系統平均負載(load average)

ldavg-5 前五分鍾的系統平均負載(load average)

ldavg-15 前15分鍾的系統平均負載(load average)

順便說一下load avarage的含義

load average可以理解為每秒鍾CPU等待運行的進程個數.

在Linux系統中,sar -q、uptime、w、top等命令都會有系統平均負載load average的輸出,那么什么是系統平均負載呢?

系統平均負載被定義為在特定時間間隔內運行隊列中的平均任務數。如果一個進程滿足以下條件則其就會位於運行隊列中:

  • 它沒有在等待I/O操作的結果

  • 它沒有主動進入等待狀態(也就是沒有調用'wait')

  • 沒有被停止(例如:等待終止)

例如:

uptime

20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94

命令輸出的最后內容表示在過去的1、5、15分鍾內運行隊列中的平均進程數量。

一般來說只要每個CPU的當前活動進程數不大於3那么系統的性能就是良好的,如果每個CPU的任務數大於5,那么就表示這台機器的性能有嚴重問題。對 於上面的例子來說,假設系統有兩個CPU,那么其每個CPU的當前任務數為:8.13/2=4.065。這表示該系統的性能是可以接受的。

三,iostat

iostat -c 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009

avg-cpu: %user %nice %system %iowait %steal %idle

30.10 0.00 4.89 5.63 0.00 59.38

avg-cpu: %user %nice %system %iowait %steal %idle

8.46 0.00 1.74 0.25 0.00 89.55

avg-cpu: %user %nice %system %iowait %steal %idle

22.06 0.00 11.28 1.25 0.00 65.41

四,mpstat

mpstat 是Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。下面只介紹 mpstat與CPU相關的參數,mpstat的語法如下:

mpstat [-P {|ALL}] [internal [count]]

參數的含義如下:

參數 解釋

-P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值

internal 相鄰的兩次采樣的間隔時間

count 采樣的次數,count只能和delay一起使用

當沒有參數時,mpstat則顯示系統啟動以后所有信息的平均值。有interval時,第一行的信息自系統啟動以來的平均信息。從第二行開始,輸出為前一個interval時間段的平均信息。與CPU有關的輸出的含義如下:

參數 解釋 從/proc/stat獲得數據

CPU 處理器ID

user 在internal時間段里,用戶態的CPU時間(%) ,不包含 nice值為負 進程 dusr/dtotal*100

nice 在internal時間段里,nice值為負進程的CPU時間(%) dnice/dtotal*100

system 在internal時間段里,核心時間(%) dsystem/dtotal*100

iowait 在internal時間段里,硬盤IO等待時間(%) diowait/dtotal*100

irq 在internal時間段里,軟中斷時間(%) dirq/dtotal*100

soft 在internal時間段里,軟中斷時間(%) dsoftirq/dtotal*100

idle 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間 (%) didle/dtotal*100

intr/s 在internal時間段里,每秒CPU接收的中斷的次數 dintr/dtotal*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

duser=user_cur – user_pre

dtotal=total_cur-total_pre

其中_cur 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數點。

mpstat -P ALL 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009

10:07:57 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s

10:07:59 PM all 20.75 0.00 10.50 1.50 0.25 0.25 0.00 66.75 1294.50

10:07:59 PM 0 16.00 0.00 9.00 1.50 0.00 0.00 0.00 73.50 1000.50

10:07:59 PM 1 25.76 0.00 12.12 1.52 0.00 0.51 0.00 60.10 294.00

衡量CPU性能的指標:1,用戶使用CPU的情況;

CPU運行常規用戶進程

CPU運行niced process

CPU運行實時進程2,系統使用CPU情況;

用於I/O管理:中斷和驅動

用於內存管理:頁面交換

用戶進程管理:進程開始和上下文切換3,WIO:用於進程等待磁盤I/O而使CPU處於空閑狀態的比率。4,CPU的空閑率,除了上面的WIO以外的空閑時間5,CPU用於上下文交換的比率6,nice7,real-time8,運行進程隊列的長度9,平均負載

Linux中常用的監控CPU整體性能的工具有:

 mpstat: mpstat 不但能查看所有CPU的平均信息,還能查看指定CPU的信息。

 vmstat:只能查看所有CPU的平均信息;查看cpu隊列信息;

 iostat: 只能查看所有CPU的平均信息。

 sar: 與mpstat 一樣,不但能查看CPU的平均信息,還能查看指定CPU的信息。

 top:顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據用戶指定的時間來更新顯示。

五、top


特別的,top命令的前五行都是一個系統的基本信息情況,這里不做過多的解釋,上邊圖中都有了。
這里着重說一下第四行內存參數,free空閑內存總量。
納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。

如果出於習慣去計算可用內存數,這里有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached

對於內存監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。

下邊,展開敘述對上邊截圖中大部分的一個進程分析,即【第七行1以下的東西】~

PID — 進程id
USER — 進程所有者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
%CPU — 【上次更新到現在的CPU時間占用百分比】
%MEM — 【進程使用的物理內存百分比】
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)

常用操作:
1.按 【 1 】 鍵,效果:展開每個cpu使用情況
2.按 【 x 】 鍵,效果:cpu使用率排序
3.按 【 shift + > 】 鍵,效果:mem使用排序
4. top -n 2 : 設置更新次數為2次,2次后終止更新顯示
5. top -d 3 : 設置更新周期為3秒,由原來的1秒刷變3秒
6. top -p pid: 顯示指定進程的信息
7. top -i: 忽略閑置和僵死進程

分析注意

1.buffers(第四行)與cached(第五行)區別:
buffers指的是塊設備的讀寫緩沖區,cached指的是文件系統本身的頁面緩存。
他們都是Linux系統底層的機制,為了加速對磁盤的訪問。

2.Linux系統平均負載3個數字的含義(第一行)
"Load Average",系統平均負載。
先大致給一下這3個數字的含義:分別表示系統在過去1分鍾、5分鍾、15分鍾內運行進程隊列中的平均進程數量。
運行隊列嘛,沒有等待IO,沒有WAIT,沒有KILL的進程通通都進這個隊列。

a).1,5,15分鍾三個數組,參考哪個呢?
后兩個好點。

b).那么怎么分析負載是否過高呢?
個人認為哈,單核負載在0.7以下是安全的,超過0.7就需要進行優化了。
公式: 負載值 / cpu核數 = 比較值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM