AIX系統CPU監控與評估

AIX系統CPU監控與評估... 2

, VMSTAT命令(CPU) 2

1.1 cpu. 3

1.2 kthr(內核等待) 3

1.3 faults故障... 4

1.4 memory(內存) 4

1.5 page磁盤交換... 5

, iostat命令... 5

, Sar命令... 5

3.1 實時採樣和顯示... 6

3.2 sar –P(報告每個處理器的信息) 6

3.3 sar –c (系統調用率) 7

3.4 sar –q(運行隊列長度和交換隊列長度) 8

, tprof監視進程的cpu使用... 9

4.1 實時或在線方式... 9

, ps命令... 10

5.1 顯示佔用cpu最高的進程... 10

, 小結... 11

 


AIX系統CPU監控與評估

中央處理器是系統最快的組件之一. 在某一個時間單位內對單個程序來說保持100%CPU佔用率(也就是說空閒0%, 等待0%)超過幾秒鐘是很少見的. 如果監視器長時間地顯示CPU佔用率爲100%, 則很有可能是某個程序陷入了死循環. 即使程序僅僅是佔用較多資源而不是崩潰了, 也需要將他們識別出來並進行處理.

, VMSTAT命令(CPU)

該命令可迅速提供關於各種系統資源和與之相關的性能問題的簡要信息.

Vmstat命令報告關於內核線程的統計信息, 包括處於運行和等待隊列中的, 內存中的, 頁面調度中的, 磁盤中的, 中斷,系統調用, 上下文切換和CPU活動的內核線程. 所報告的CPU活動是用戶方式, 系統方式, 空閒時間和等待磁盤IO的百分比細目分類.

作爲一個cpu監視器, vmstat命令優於iostat命令, 因爲vmstat命令是滾動的, 使得它的每一行報告的輸出更容易掃描. 並且如果有很多磁盤鏈接到系統中, 由此所涉及到的開銷更少.

# vmstat 2

 

System configuration: lcpu=8 mem=8192MB

 

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

 1  0 1609407 173322   0   0   0   0    0   0 276 5630 1046 23  1 77  0

 1  0 1609593 173136   0   0   0   0    0   0 1209 10754 3699 10  3 87  0

 1  0 1609630 173099   0   0   0   0    0   0 637 8595 2061 26  1 72  0

 0  0 1596477 186252   0   0   0   0    0   0 330 3439 1200  8  1 91  0

 1  0 1603954 178775   0   0   0   0    0   0 227 8673 897 26  1 74  0

 1  0 1609455 173274   0   0   0   0    0   0 311 4853 1116 20  1 79  0

 2  0 1609444 173285   0   0   0   0    0   0 268 5253 1078 21  1 78  0

 1  1 1609464 173265   0   0   0   0    0   0 1038 8405 3346  8  3 89  1

 1  0 1609469 173260   0   0   0   0    0   0 533 6095 1857 22  1 77  0

 1  0 1596188 186541   0   0   0   0    0   0 201 28445 910 23  1 75  0

 1  0 1596187 186542   0   0   0   0    0   0 166 45170 767 24  1 75  0

 1  0 1596378 186351   0   0   0   0    0   0 127 60695 708 24  2 75  0

 1  0 1596190 186539   0   0   0   0    0   0 171 53852 808 24  2 75  0

 1  0 1596329 186400   0   0   0   0    0   0 704 5027 1856  4  1 95  0

 0  0 1596357 186372   0   0   0   0    0   0 841 6574 2227  3  1 96  0

最佳利用是讓CPU100%的時間中工作. 這適用於單用戶系統的情況, 不需要共享CPU. 總的來說, 如果us+sy時間低於90%, 則不認爲單用戶系統是CPU受限制的. 但是, 如果一個多用戶系統中us+sy時間超過80%, 則進程可能要花時間在運行隊列中等待. 響應時間和吞吐量會受損害.

要檢查CPU是否是瓶頸, 考慮vmstat報告中的四個cpu列和兩個kthr(內核線程). 查看故障列也是值得的.

1.1 cpu

在給定的時間間隔內使用cpu時間的百分比細分.

kthr    memory              page              faults        cpu    

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

Us:

用戶方式下所花費的cpu時間百分比. 進程可以在用戶方式下執行, 也可以在系統(內核)方式下執行. 當在用戶方式下時, 進程在它自己的應用程序代碼中執行, 不需要內核資源來進行計算, 管理內存或設置變量.

Sy:

系統方式下執行一個進程所花時間的百分比. 這包括內核進程(kernel procedures)和其他需要訪問內核資源的進程所消耗的cpu資源.

Id:

沒有未完成的磁盤iocpu空閒或等待的時間百分比. ps命令(帶有-k-g 0參數)生成的報告將它確定爲kprocwait.

Wa:

暫掛本地磁盤ioNFS加載的磁盤的cpu空閒百分比. 如果在cpu等待時至少有一個未完成的磁盤io, 該時間就歸爲IO等待時間. 除非進程使用異常IO, 否則對磁盤的io請求會導致調用的進程阻塞, 知道請求完成爲止.

超過25%wa值可以表示磁盤子系統沒有被正確平衡, 或者這也可能是磁盤密集工作負載的結果.

1.2 kthr(內核等待)

在採樣時間間隔上對各種隊列中的內核線程數求的每秒平均值.

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

 

R:

可運行的內核線程平均數, 包括正在運行的線程和正在等待cpu的線程, 如果這個數字大於cpu的數目, 至少有一個線程要等待cpu, 等待cpu的線程越多, 越有可能對性能產生影響.

B:

每秒在等待隊列中的內核線程數, 這包括正在等待文件系統io的線程或者由於內存裝入控制而暫掛的線程.

P:

對於vmstat –I, 是每秒等待原始設備IO的線程數目. 等待文件系統IO的線程不包括在這裏.

1.3 faults故障

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 

In:

每秒設備中斷數

Sy:

每秒系統調用次數.

Cs:

每秒鐘的上下文切換次數. 物理cpu資源細分爲10毫秒的邏輯時間片, 假設一個線程調度被運行, 它將一直運行直到它的時間片用完,或被搶先,或者自願放棄cpu控制權. 當給予另一個線程cpu控制權時, 必須保存前一個線程的上下文或工作環境, 並且必須裝入當前線程的上下文. 操作系統有一個很有效的上下文切換過程, 所以每次切換並不耗資源. 任何上下文切換的顯著增加, 如當cs比磁盤io和網絡信息包速率高很多, 都應進行進一步調查.

1.4 memory(內存)

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

Avm列表表示活動虛擬內存的頁面數, 每頁一般4KB

Fre表示空閒的頁面數.

1.5 page磁盤交換

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

 1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

 1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

Re: 該列無效

Pi: 從磁盤交換到內存的交換頁(調頁空間)數量, 4KB/. 當進程訪問一個交換頁時就產生一個缺頁故障.

Po: 從內存交換到磁盤的交換頁數量, 4KB/. 如果寫入的交換頁在交換區間內不存在或者已經做了修改, 則寫入交換區間. 如果不被再次訪問, 則會留在調度空間中直到進程終止或者放棄空間.

Fr: 根據頁面替換算法每秒釋放的頁數. VMM的頁面替換例程會定時掃描頁面禎表, 以釋放一些長時間沒有訪問的數據頁到空閒列表. 在這個過程中, 計算頁面不會產生IO, 工作頁面如果數據沒有發生修改, 也不需要寫回磁盤, 不會產生IO.

Sr: 爲了釋放頁面掃描的頁數. Sr值如果比fr值高很多, 說明替換算法要查找可疑替換的頁面越困難.

Cy: 每秒頁面替換代碼掃描了PFT多少次, 因爲增加空閒列表達到maxfree, 不一定需要完全掃描PFT, 就是說這個值一般會小於1, 而所有vmstat輸出都爲整數, 所以cy通常爲0.

, iostat命令

Iostat命令是活的第一印象的最快方法, 這個工具也報告cpu統計信息.

# iostat -t 2 5

 

System configuration: lcpu=8

 

tty:      tin         tout    avg-cpu: % user % sys % idle % iowait

          0.0         16.0                1.0   0.3   98.6      0.1

          0.0         70.0                6.1   0.3   93.6      0.0

          0.0         34.5                5.5   0.4   94.0      0.1

          0.0         35.7                1.4   0.3   98.3      0.0

          0.0         33.0                3.7   0.4   95.9      0.0

, Sar命令

Sar命令收集關於系統的統計數據.

Sar命令會增加系統負載, 如果採樣頻率較高就會加劇預先存在的性能問題.

Aix系統維護了一系列系統活動計數器, 用來記錄各種活動並提供sar命令報告的數據. Sar命令不會導致這些計數器被更新或使用, 不論sar命令是否運行這些計數器都會持續工作. 根據指定的sar命令的採樣速率和採樣次數, 它僅僅從這些計數器中提取數據並保存下來.

通過指定參數, sar命令提供了排隊, 頁面調度, TTY和許多其他的統計信息. Sar命令的一個重要功能是它會報告系統級(所有處理器的綜合)cpu統計信息(對一些結果取平均值, 以百分比表示, 對其他求和), 或者報告每個獨立處理器的統計信息.

3.1 實時採樣和顯示

    # sar -u 1 10

 

AIX SISDB_B 3 5 00C674AF4C00    07/14/09

 

System configuration: lcpu=8  mode=Capped

 

16:24:44    %usr    %sys    %wio   %idle   physc

16:24:45      17       5       2      76    4.00

16:24:46      22       5       1      72    4.03

16:24:47      37       6       1      56    3.98

16:24:48      19       4       3      74    3.94

16:24:49      16       4       1      79    4.05

16:24:50      27       5       2      67    3.97

16:24:51      14       4       1      80    4.00

16:24:52      14       4       1      80    4.01

16:24:53      16       4       1      79    3.99

16:24:54       4       1       0      95    3.98

 

Average       19       4       1      76    4.00

報告每個處理器或整個系統的統計信息. 當與-P標誌一起使用時, 爲每個指定的處理器提供此信息; 否則, 只在系統範圍內提供此信息. 因爲-u標誌信息以百分比表示, 所以系統範圍信息只是每個處理器統計信息的平均值.

3.2 sar –P(報告每個處理器的信息)

-P選項報告指定處理器的每個處理器統計信息. 通過指定ALL關鍵字, 可以報告每個單獨的處理器統計信息和所有處理器的平均值.

# sar -uP ALL 3 2

 

AIX SISDB_B 3 5 00C674AF4C00    07/14/09

 

System configuration: lcpu=8  mode=Capped

 

16:33:32 cpu    %usr    %sys    %wio   %idle   physc

16:33:35  0        8       2       1      89    0.54

          1        0       0       0     100    0.45

          2        5       3       0      93    0.53

          3        0       0       0     100    0.47

          4       18       3       1      78    0.57

          5        0       0       0     100    0.42

          6        8       3       1      88    0.54

          7        0       0       0     100    0.46

          -        6       2       0      93    3.99

16:33:38  0       23       3       0      74    0.59

          1        0       0       0     100    0.41

          2        8       2       1      89    0.54

          3        0       0       0     100    0.46

          4        2       2       0      96    0.52

          5        0       0       0     100    0.48

          6        4       2       0      94    0.53

          7        0       0       0     100    0.47

          -        5       1       0      93    4.00

 

Average   0       16       3       0      81    0.57

          1        0       0       0     100    0.43

          2        6       3       0      91    0.53

          3        0       0       0     100    0.47

          4       11       3       0      86    0.55

          5        0       0       0     100    0.45

          6        6       2       0      91    0.53

          7        0       0       0     100    0.46

          -        5       2       0      93    4.00

    每節的最後一行在cpu一列中以一個短線(-)開始, 是所有處理器的平均值. 只有當使用-P ALL選項時纔會顯示一個平均值.

3.3 sar –c (系統調用率)

    -c選項顯示了系統調用率.

# sar -c 1 3

 

AIX SISDB_B 3 5 00C674AF4C00    07/14/09

 

System configuration: lcpu=8  mode=Capped

 

16:38:47 scall/s sread/s swrit/s  fork/s  exec/s rchar/s wchar/s

16:38:48    8792     681     353    2.00    2.00 2364515   49391

16:38:49    7785     281     276    0.00    0.00   68447   30005

16:38:50    8997     392     392    0.00    0.00   51992   58212

 

Average     8525     451     340    0.67    0.67  828318   45869

-c選項報告系統調用, 當與-P標誌一起使用時, 只爲每個指定處理器提供此信息; 否則在系統範圍內提供此信息. 將顯示以下數值:

說明

Scall/S

報告系統調用總數

Sread/S

讀系統調用總數

Swrite/S

寫系統調用總數

Fork/S

Fork系統調用總數

Exec/S

Exec系統調用總數

Rchar/S

讀系統調用傳送的字符總數

Wchar/S

寫系統調用傳送的字符總數

    Vmstat也顯示系統調用率, 但如果這些系統調用時read(), write(), fork(), exec()和其他調用, sar命令也可以顯示他們. 請特別注意fork/s這一列. 如果它較高, 可能需要使用記賬實用程序(trace命令或tprof命令)進行進一步調查.

3.4 sar –q(運行隊列長度和交換隊列長度)

# sar -q 1 10

 

AIX SISDB_B 3 5 00C674AF4C00    07/14/09

 

System configuration: lcpu=8  mode=Capped

 

16:47:19 runq-sz %runocc swpq-sz %swpocc

16:47:20     1.0     100               

16:47:21     2.0     100               

16:47:22     1.0     100               

16:47:23     1.0     100               

16:47:24     1.0     100               

16:47:25                               

16:47:26                               

16:47:27     1.0     100               

16:47:28     1.0     100               

16:47:29                               

 

Average      1.1      70

說明

Runq-sz

平均內核線程數

%runocc

運行隊列佔用的時間百分比

Swpq-sz

等待頁面調入的內核線程數的平均值

Swpocc

調動隊列佔用的時間百分比

    -q選項可以指出系統中是否運行太多的作業(runq-sz), 或有一個潛在的頁面調度瓶頸. 在一個高度事務性的系統中, 運行隊列可能有幾百個, 因爲每個事務只使用少量的cpu時間. 如果頁面調度是主要問題, 則運行vmstat命令, 高的io等待表明存在嚴重的磁盤爭用活動, 或由於內存不足而產生過多的頁面調度.

, tprof監視進程的cpu使用

Tprof用於統計每個進程的cpu使用情況. 對任何使用可能是cpu受限的情況, 以及想了解程序的哪些部分佔用大量cpu的人, 該命令是一個有用的工具.

Tprof可用以下四種方式運行;

1, 實時或在線方式

2, 人工離線方式;

3, 自動離線方式;

4, 後處理方式

4.1 實時或在線方式

如果指定-x標誌但未指定-A標記, tprof以實時方式運行. 在實時方式下, tprof在後臺啓動AIX trace實用程序並處理所產生的跟蹤數據. 當被概要分析的程序結束時, tprof收集符號名稱信息並生成報告.

# tprof -x sleep 10

Tue Jul 14 17:09:01 2009

System: AIX 5.3 Node: i2db Machine: 00CC886E4C00

Starting Command sleep 10

stopping trace collection.

Generating sleep.prof

# ls

perl01      sleep.prof

# more sleep.prof

Configuration information

=========================

System: AIX 5.3 Node: i2db Machine: 00CC886E4C00

Tprof command was:

    tprof -x sleep 10

Trace command was:

    /usr/bin/trace -ad -M -L 1722525696 -T 500000 -j 000,00A,001,002,003,38F,005,006,134,139,5A2,5A5,465,234, -o - 

Total Samples = 685

Traced Time = 10.03s (out of a total execution time of 10.03s)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

 

Process                                Freq  Total Kernel   User Shared  Other

=======                                ====  ===== ======   ==== ======  =====

wait                                      4 100.00 100.00   0.00   0.00   0.00

=======                                ====  ===== ======   ==== ======  =====

Total                                     4 100.00 100.00   0.00   0.00   0.00

 

Process                   PID      TID  Total Kernel   User Shared  Other

=======                   ===      ===  ===== ======   ==== ======  =====

wait                     8196     8197  55.91  55.91   0.00   0.00   0.00

wait                    57372    69667  14.74  14.74   0.00   0.00   0.00

wait                    53274    61471  14.74  14.74   0.00   0.00   0.00

wait                    49176    57373  14.60  14.60   0.00   0.00   0.00

=======                   ===      ===  ===== ======   ==== ======  =====

Total                                  100.00 100.00   0.00   0.00   0.00

上述命令運行10, 在當前目錄下創建一個名爲sleep.tprof的文件. Sleep.tprof文件中字段total爲此進程調度到的cpu次數, tprof的輸出準確地顯示出哪個進程在使用cpu時間.

  在上面的報告中我們看到, 大部分cpu時間都是被wait佔用的, 這裏的wait實際上是idle進程, 可以表明這個系統是一個完全空閒的系統.

, ps命令

Ps命令主要用來顯示進程的當前狀態.

5.1 顯示佔用cpu最高的進程

# ps aux |head -20

USER        PID %CPU %MEM   SZ  RSS    TTY STAT    STIME  TIME COMMAND

root      57372  6.1  0.0  384  384      - A      Jan 10 131504:45 wait

root      73764  6.1  0.0  384  384      - A      Jan 10 129539:44 wait

root      65568  6.0  0.0  384  384      - A      Jan 10 128808:58 wait

root       8196  5.9  0.0  384  384      - A      Jan 10 126804:12 wait

root      61470  5.9  0.0  384  384      - A      Jan 10 125464:31 wait

root      77862  5.7  0.0  384  384      - A      Jan 10 122563:54 wait

root      69666  5.7  0.0  384  384      - A      Jan 10 121680:22 wait

root      53274  5.6  0.0  384  384      - A      Jan 10 119426:46 wait

oracle   409836  1.9  1.0 57344 81668      - A    16:21:14  9:32 oracleSISDB2 (LO

oracle   856126  1.4  1.0 57140 81464      - A    15:25:53 12:48 oracleSISDB2 (LO

oracle   598078  0.7  1.0 56740 81064      - A    17:18:20  0:20 oracleSISDB2 (LO

oracle   606456  0.4  1.0 56036 80360      - A    17:21:46  0:05 oracleSISDB2 (LO

oracle   966862  0.1  1.0 55144 79468      - A      Jul 08 70:32 oracleSISDB2 (LO

oracle   442494  0.1  1.0 58984 83308      - A      Feb 16 1711:01 ora_lms1_SISDB2

oracle   581808  0.1  1.0 59140 83464      - A      Feb 16 1706:08 ora_lms0_SISDB2

oracle   974952  0.1  1.0 55224 79548      - A    12:54:44  1:46 oracleSISDB2 (LO

root     176256  0.0  0.0  508  512      - A      Jan 10 211:58 /usr/sbin/syncd

oracle   573582  0.0  1.0 57680 82004      - A      Feb 16 142:18 ora_lmon_SISDB2

oracle   651300  0.0  1.0 57204 81528      - A      Feb 16 118:48 ora_diag_SISDB2

在這個輸出結果中, 排在前面的8root用戶的wait進程, 這其實是cpu空閒的時候運行的空閒進程.

所以cpu最高的幾個進程實際是下面的oracle用戶的歐瑞aSISDB2進程, 我們可以用下面的方法查看具體的進程在幹什麼事情.

例如我們查看PID = 487432的進程, 可以使用下面的方法.

# su - oracle

[YOU HAVE NEW MAIL]

$ sqlplus /nolog

 

SQL*Plus: Release 10.2.0.3.0 - Production on Tue Jul 14 17:24:42 2009

 

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

 

SQL> conn / as sysdba

Connected.

SQL> oradebug setospid 487432

Oracle pid: 12, Unix process pid: 487432, image: oracle@i2db (MMNL)

SQL> oradebug event 10046 trace name context forever,level 8

Statement processed.

SQL> oradebug tracefile_name

/oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc

SQL> oradebug event 10046 trace name context off

Statement processed.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

$ tkprof /oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc

output = arpdb_mm1.txt

TKPROF: Release 10.2.0.3.0 - Production on Tue Jul 14 17:31:29 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

$

, 小結

  對於系統cpu的監控,建議:

  1)使用vmstat進行分析

  2)sar –P ALL 1 10 分析,多個cpu間的負載是否平衡

  3)ps aux 查看

  4)tprof查看更詳細的信息

發佈了86 篇原創文章 · 獲贊 5 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章