top的使用方法
top命令主要用于分析linux服務器當前的實時CPU和內存消耗情況,以及進程的運行情況統計。
命令使用:top ,具體top命令的使用方法和以下截圖的各個信息的含義,可通過man top命令來查看。
其中比較常用的是:按1顯示各個核的統計,使用-p參數指定所要監控的進程號。

從上到下分析:
系統整體負載統計
第一行:top - 11:32:29 up 109 days, 20:46, 1 user, load average: 0.24, 0.36, 0.44
11:32:29:當前服務器時間
up 109 days:服務器運行了多久
1 user:當前的登錄用戶數量
load average: 0.24, 0.36, 0.44系統1分鐘,5分鐘,15分鐘的負載統計,這個數字在單核和多核之間是存在差別的,
(1)如果是單核,則值在0.0~1.0之間表示正常,一般不要超過0.7,多核類似。
(2)如果是多核,則值在0.0~CPU核心數表示正常,如2核是0到2,4核是0到4。多核參照單核的標準的話,是:數值 / CPU核數,在0.00-1.00之間正常。當使用這個數值除以CPU核數,即:數值 / CPU核數,之后,如果大于5則表示系統負載太高。
CPU的核心數查看:
查看物理CPU的個數 #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l 查看邏輯CPU的個數 #cat /proc/cpuinfo |grep "processor"|wc –l 查看CPU是幾核 #cat /proc/cpuinfo |grep "cores"|uniq 查看CPU的主頻 #cat /proc/cpuinfo |grep MHz|uniq 直接獲得CPU核心數 (該命令即可全部算出多少核) #grep 'model name' /proc/cpuinfo | wc -l
第二行:Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
113 total:當前系統一共有113個進程
2 running:2個進程正在運行
111 sleeping:111個進程在休眠
0 stopped:停止進程的個數
0 zombie:僵尸進程的個數
CPU的各個核統計
第三、四行:兩個CPU核的統計信息
Cpu0 : 27.2%us, 16.4%sy, 0.0%ni, 46.0%id, 0.0%wa, 0.0%hi, 3.7%si, 6.7%st
Cpu1 : 20.2%us, 12.8%sy, 0.0%ni, 55.9%id, 0.0%wa, 0.0%hi, 3.7%si, 7.4%st
- us:用戶空間進程所用CPU占比
- sy:系統空間進程所用CPU占比
- ni:調整了進程優先級的進程所用CPU占比
- id:空閑CPU占比
- wa:等待輸入輸出的進程所用CPU占比
- hi:硬中斷所用CPU占比si軟中斷所用CPU占比
內存和交換分區統計
第五行:Mem: 5991036k total, 5878620k used, 112416k free, 39464k buffers
- total:物理內存總量
- used:已使用的物理內存量
- free:空閑的物理內存量
- buffers:用作內核緩存的內存量,即內核頁緩存,操作系統盡可能地將從磁盤讀出的內容或者要寫到磁盤的內容通過頁緩存來進行緩沖,在規定的時間或者當緩存到達一定量時,再刷到磁盤,減少磁盤的讀寫操作,提高系統性能。
第六行:Swap: 4194300k total, 51312k used, 4142988k free, 1663552k cached
- total:交換分區總大小,即分了多少磁盤用作交換分區
- used:已使用的交換分區總量
- free:空閑的交換分區量
- cached:緩沖的交換分區使用量,即內存的內容可以交換到交換分區,然后再從交換分區加載會內存,加載回之后,交換分區對應的內容不刪掉,而是緩沖起來,故之后內存內容再交換出來時,如果該內容沒有修改過,則不需要再對交換分區進行寫出,減少數據讀寫量。當交換分區不夠時,則可以刪除該緩沖的內容來騰出空間。
對于當前的可用內存量 為:free + buffers + cached
進程統計
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8960 root 20 0 4437m 1.2g 5888 S 56.6 20.8 46006:20 JAVA 26114 root 20 0 4709m 2.3g 8400 S 26.4 40.0 2379:41 java 15076 root 20 0 2790m 110m 2332 S 4.5 1.9 4633:09 java
- PID:進程ID
- USER:進程的owner,即是在以該用戶登錄的身份時啟動的。
- PR NI:進程優先級,其中PR為整數,NI為負數,絕對值越大,進程優先級越高。
- VIRT:進程的虛擬內存大小,VIRT = RES + SHR,即進程申請了多少內存,但是不一定使用了這么多,具體使用了多少物理內存是RES顯示的。
- RES:進程所用的實際物理內存大小,即進程實際使用了多少物理內存,包含進程自身的內存和與其他進程共享的內存,但不包括swap out的。在分析進程是否占用太多內存時,關注這個值。
- SHR:進程所用的共享內存大小,如共享庫,如果需要知道該進程自身獨立使用的內存大小,則使用RES-SHR。當共享內存swap out到交換分區之后,則SHR的值會減小。
- S:進程狀態,對應的值:D = 不可中斷的睡眠狀態, R = 運行, S = 睡眠, T = 跟蹤/停止, Z=僵尸進程
- %CPU:上次更新到現在所使用的CPU的占比,即該進程在各個CPU核運行的占比相加,如果是多核,可能超過100%
- %MEM:進程所用的物理內存占比,即對于系統正在被使用的物理內存中,該進程使用了多少,如系統物理內存重量為8G,當前共使用了2G,當前進程為30%,則該進程使用了0.6G。
- TIME+:進程運行了多久,這個是百秒為單位,即需要乘以100來轉為秒,另外一個TIME則是秒為單位。
- COMMAND:進程的啟動命令,如Java進程是通過java命令啟動的。