標籤:style 使用 width 檔案 資料 問題
解釋伺服器發生了什麼——top工具
在檢查伺服器的詳細工作效能狀態前,系統管理員需要對當前伺服器狀態有總體的瞭解. 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效能
在用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時是好是壞之前, 需要系統管理員更加深入的瞭解特定工作量. 比如對於如下兩個任務:
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並不是總是不好, 如核心使用它把不需要的資料從記憶體移除, 以便釋放更多記憶體空間. |