linux-分析CPU的瓶頸

來源:互聯網
上載者:User

衡量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/200907: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/200907: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/2009avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                    30.10    0.00          4.89         5.63    0.00   59.38avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                    8.46       0.00          1.74         0.25    0.00   89.55avg-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值為負 進程 usr/total*100

nice 在internal時間段裡,nice值為負進程的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接收的中斷的次數 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 表示當前值,_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 五,top該命令詳見:http://space.itpub.net/?uid-8554499-action-viewspace-itemid-580475轉自:http://space.itpub.net/8554499/viewspace-580300

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.