效能優化CPU 記憶體 磁碟I O 網路效能相關命令

2021-09-13 17:15:39 字數 4449 閱讀 8511

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是乙個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重點也不同、 優化的方法也不同、優化的引數也不同。效能監測是系統優化過程中重要的一環,如果沒有監測、不清楚效能瓶頸在**,怎麼優化呢?所以找到效能 瓶頸是效能監測的目的,也是系統優化的關鍵。系統由若干子系統構成,通常修改乙個子系統有可能影響到另外乙個子系統,甚至會導致整個系統不穩定、崩潰。所 以說優化、監測、測試通常是連在一起的,而且是乙個迴圈而且長期的過程,通常監測的子系統有以下這些:

•    cpu

•    memory

•    io

•    network

這些子系統互相依賴,了解這些子系統的特性,監測這些子系統的效能引數以及及時發現可能會出現的瓶頸對系統優化很有幫助。

應用型別

不同的系統用途也不同,要找到效能瓶頸需要知道系統跑的是什麼應用、有些什麼特點,比如 web server 對系統的要求肯定和 file server 不一樣,所以分清不同系統的應用型別很重要,通常應用可以分為兩種型別:

•    io 相關,io 相關的應用通常用來處理大量資料,需要大量記憶體和儲存,頻繁 io 操作讀寫資料,而對 cpu 的要求則較少,大部分時候 cpu 都在等待硬碟,比如,資料庫伺服器、檔案伺服器等。

監測工具

我們只需要簡單的工具就可以對 linux 的效能進行監測,以下是 vpsee 常用的工具:

工具    簡單介紹

top    檢視程序活動狀態以及一些系統狀況

vmstat    檢視系統狀態、硬體和系統資訊等

iostat    檢視cpu 負載,硬碟狀況

sar    綜合工具,檢視系統狀況

mpstat    檢視多處理器狀況

netstat    檢視網路狀況

iptraf    實時網路狀況監測

tcpdump    抓取網路資料報,詳細分析

tcptrace    資料報分析工具

netperf    網路頻寬工具

dstat    綜合工具,綜合了 vmstat, iostat, ifstat, netstat 等多個資訊

本系列將按照cpu、記憶體、磁碟io、網路這幾個方面分別介紹。

linux效能監測:cpu篇

舉兩個現實中的例子來實際分析一下:

$ vmstat 1

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

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

4  0    140 2915476 341288 3951700  0    0     0     0 1057  523 19 81  0  0  0

4  0    140 2915724 341296 3951700  0    0     0     0 1048  546 19 81  0  0  0

4  0    140 2915848 341296 3951700  0    0     0     0 1044  514 18 82  0  0  0

4  0    140 2915848 341296 3951700  0    0     0    24 1044  564 20 80  0  0  0

4  0    140 2915848 341296 3951700  0    0     0     0 1060  546 18 82  0  0  0

從上面的資料可以看出幾點:

1.    interrupts(in)非常高,context switch(cs)比較低,說明這個 cpu 一直在不停的請求資源;

2.    user time(us)一直保持在 80% 以上,而且上下文切換較低(cs),說明某個程序可能一直霸佔著 cpu;

3.    run queue(r)剛好在4個。

$ vmstat 1

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

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

14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0

17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0

20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0

17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0

16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

從上面的資料可以看出幾點:

1.    context switch(cs)比 interrupts(in)要高得多,說明核心不得不來回切換程序;

2.    進一步觀察發現 system time(sy)很高而 user time(us)很低,而且加上高頻度的上下文切換(cs),說明正在執行的應用程式呼叫了大量的系統呼叫(system call);

3.    run queue(r)在14個執行緒以上,按照這個測試機器的硬體配置(四核),應該保持在12個以內。

引數介紹:

•    r,可執行佇列的執行緒數,這些執行緒都是可執行狀態,只不過 cpu 暫時不可用;

•    b,被 blocked 的程序數,正在等待 io 請求;

•    in,被處理過的中斷數

•    cs,系統上正在做上下文切換的數目

•    us,使用者占用 cpu 的百分比

•    sys,核心和中斷占用 cpu 的百分比

•    wa,所有可執行的執行緒被 blocked 以後都在等待 io,這時候 cpu 空閒的百分比

•    id,cpu 完全空閒的百分比

mpstat

mpstat 和 vmstat 類似,不同的是 mpstat 可以輸出多個處理器的資料,下面的輸出顯示 cpu1 和 cpu2 基本上沒有派上用場,系統有足夠的能力處理更多的任務。

$ mpstat -p all 1

linux 2.6.18-164.el5 (vpsee) 11/13/2009

02:24:33 pm  cpu   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

02:24:34 pm  all    5.26    0.00    4.01   25.06    0.00    0.00    0.00   65.66   1446.00

02:24:34 pm    0    7.00    0.00    8.00    0.00    0.00    0.00    0.00   85.00   1001.00

02:24:34 pm    1   13.00    0.00    8.00    0.00    0.00    0.00    0.00   79.00    444.00

02:24:34 pm    2    0.00    0.00    0.00  100.00    0.00    0.00    0.00    0.00      0.00

02:24:34 pm    3    0.99    0.00    0.99    0.00    0.00    0.00    0.00   98.02      0.00

ps如何檢視某個程式、程序占用了多少 cpu 資源呢?下面是 firefox 在 vpsee 的一台 sunray 伺服器上的運**況,當前只有2個使用者在使用 firefox:

$ while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'firefox'; sleep 1; done

pid  ni pri %cpu psr command

7252   0  24  3.2   3 firefox

9846   0  24  8.8   0 firefox

7252   0  24  3.2   2 firefox

9846   0  24  8.8   0 firefox

7252   0  24  3.2   2 firefox

linux效能監測:記憶體篇

CPU 記憶體 磁碟 IO流查詢

總核數 物理cpu個數 x 每顆物理cpu的核數 總邏輯cpu數 物理cpu個數 x 每顆物理cpu的核數 x 超執行緒數 檢視物理cpu個數 cat proc cpuinfo grep physical id sort uniq wc l檢視每個物理cpu中core的個數 即核數 cat proc...

Linux監控CPU,記憶體,磁碟I O

簡單講講linux下監控 cpu 監控cpu,top命令能夠實時監控系統的執行狀態,並且可以按照cpu 記憶體和執行時間進行排序,同時top命令還可以通過互動式命令進行設定顯示,通過top命令可以檢視即時活躍的進行。記憶體 free命令可以檢視當前系統記憶體的使用情況 free m以mb為單位顯示系...

CPU 記憶體 磁碟IO之間的關係

當程式或者操作者對cpu發出指令,這些指令和資料暫存在記憶體裡,在cpu空閒時傳送給cpu,cpu處理後把結果輸出到輸出裝置上,輸出裝置就是顯示器,印表機等。在沒有顯示完之前,這些資料也儲存在記憶體裡,如果記憶體不足,那麼系統自動從硬碟上劃分一部分空間作為虛擬記憶體來用。但寫入和讀取的速度 跟物理記...