解釋服務器發生了什麼——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 | 進程命令. |