Linux性能優化和監控系列(一)——top工具

解釋服務器發生了什麼——top工具
bash


在檢查服務器的詳細工做性能狀態前,系統管理員須要對當前服務器狀態有整體的瞭解. top是檢查服務器整體狀態的強有力工具, 經過top能夠獲取CPU, Memory, Process運行信息, 以下是運行top命令後的數據顯示:服務器

top - 20:08:09 up 10 min,  1 user,  load average: 0.00, 0.02, 0.01
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   260016k used,  3664684k free,    13552k buffers
Swap:  4063224k total,        0k used,  4063224k free,    75816k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6284 root      20   0 15028 1308 1000 R  0.3  0.0   0:00.03 top
    1 root      20   0 19356 1580 1268 S  0.0  0.0   0:01.80 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 migration/1
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
   10 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1


用top監控CPU性能ide

在用top分析服務器性能時,首先注意的是load average, load average包括三個信息, 分別指最後一分鐘, 最後5分鐘, 最後15分鐘系統平均性能, 該數值的錨固值(anchor value)是1.0. 對於一個單核CPU, 當錨固值達到1.0時, 系統會處於忙碌狀態, 但應用也能夠正常運行, 沒有任何應用排隊等待CPU.工具


須要注意的是load average是系統的平均性能而不是CPU的, 有可能load average遠高於1.0, 可是CPU沒有作任何工做, 如系統忙於等待I/O.性能


使系統老是工做在anchor value爲1.0也許很好, 但也許沒有必要, 所以在判斷系統工做在anchor value爲1.0時是好是壞以前, 須要系統管理員更加深刻的瞭解特定工做量. 好比對於以下兩個任務:spa

Task 1: while true; do true; done操作系統

Task 2: dd if=/dev/sda of=/dev/null隊列

當執行Task 1時, Task 1會使CPU的一個核使用率達到100%, anchor value值也會超過1.0, 若是系統CPU只有一個核, 那麼系統會處於徹底忙碌狀態, 這時新的進程不會再開始, 會被放入隊列中排隊, 直到有空閒的CPU資源.進程

當執行Task 2時, Task 2也會使anchor value大於或等於1.0, 可是這時該任務只是在等待I/O資源, CPU任然能夠繼續給其餘進程使用.內存


若是系統CPU很是忙碌, 你須要經過top命令的CPU行深刻的分析系統正在作什麼, CPU行提供以下CPU性能信息:

us
us表示user space負載, 一般運行在user space下的應用程序由終端用戶啓動, 不以root權限運行, 若是us負載高, 這意味着應用程序消耗CPU高.
sy
sy表示system space負載, 一般運行在system space下的進程由操做系統內核調用, 正常狀況下sy不會很高.
ni ni表示已經啓動的用nice命令調整的任務數.
id id表示CPU空閒的時間.
wa wa表示CPU正在等待I/O, 若是wa連續大於30, 這表示關聯storage和network的I/O channel有問題,須要檢查network和storage的性能問題.
hi hi表示CPU用在處理硬件終端的時間.
si si跟軟件中斷有關, 一般是些由內核建立的低優先級軟件終端, 幾乎不多會遇到si使用率很高.
st st跟一個被虛擬化使用的環境有關, 在某些虛擬化環境中, 虛擬機會宿主操做系統偷取CPU時間, 若是這種狀況發生, st會有使用率, 若使用率很高, 需考慮從服務器卸載虛擬機.


用top監控內存性能

top命令的Mem行跟內存和交換分區有關, Mem行包括五個參數:

total
服務器總的物理內存.
used
當前使用的總得內存, 包括buffers和cache.
free 當前沒有使用的內存.
buffers
buffer跟服務器使用的write cache有關, 也包括文件系統表和一些服務器須要放在內存的結構. 全部須要寫到磁盤的數據首先寫到write cache, 從終端用戶的角度來看, 用戶使用的應用程序不須要等待數據寫入. 若是系統須要更多的內存, 而不能從free的內存分配時, write cache能被刷新, 而後將write cache使用的內存給其餘應用程序使用. 總之, buffer使系統變得更快.
cached
當用戶從服務器請求文件時,一般文件須要從磁盤讀取, 因爲磁盤比內存大約慢1000倍, 所以每次從磁盤獲取文件後都放到cache來加速下次讀取該文件. 若是分配給cahce的內存須要給其餘應用程序使用, cache能夠被當即釋放加入到free內存中以便使用. 對於那些讀次數多的服務器,cache內存一般很高,若是cache內存低於總內存的40%, 那麼服務器性能可能很慢, 這時需增長內存.
swap swap space是在硬盤上模擬內存, 若是系統開始使用swap, 這可很差, 由於swap比內存大約慢1000倍. 但swap並非老是很差, 如內核使用它把不須要的數據從內存移除, 以便釋放更多內存空間.


監控Buffer和Cache內存

1. 重啓服務器.

2. 觀察當前服務器Buffer和Cache.

top - 03:17:03 up 1 min,  3 users,  load average: 0.25, 0.11, 0.04
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   199948k used,  3724752k free,     9448k buffers
Swap:  4063224k total,        0k used,  4063224k free,    55316k cached

3. 運行以下命令填滿Cache, 並觀察Cache數量.

cd /etc
for I in *
do
    cat $I
done

top - 03:19:09 up 3 min,  3 users,  load average: 0.09, 0.08, 0.03
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   212968k used,  3711732k free,    10556k buffers
Swap:  4063224k total,        0k used,  4063224k free,    65124k cached

4. 運行以下命令填滿Buffer, 並觀察Buffer數量.

ls -Rl / > /dev/null &

top - 03:22:07 up 6 min,  3 users,  load average: 0.44, 0.22, 0.08
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   329528k used,  3595172k free,    39116k buffers
Swap:  4063224k total,        0k used,  4063224k free,    65176k cached

5. 經過以下命令清除服務器Buffer和Cache.

echo 3 > /proc/sys/vm/drop_caches


用top監控進程

PID
進程ID.
USER 啓動這個進程的用戶.
PR 進程的優先級.
NI 已啓動進程的nice值.
VIRT 進程首次啓動時要求的內存大小.
RES 常駐內存, 表示進程運行實際須要的內存, 實際內存可能比virt內存要小.
SHR 當前進程與其餘進程共享的內存.
S 進程狀態.
%CPU 當前進程使用的CPU時間百分比.
%MEM 當前進程使用的內存百分比.
TIME+
當前進程使用CPU週期的總時間.
COMMAND 進程命令.
相關文章
相關標籤/搜索