VIRT:virtual memory usage。Virtual這個詞很神,一般解釋是:virtual adj.虛的, 實質的, [物]有效的, 事實上的。到底是虛的還是實的?讓Google給Define之後,將就明白一點,就是這東西還是非物質的,但是有效果的,不發生在真實世界的,發生在軟件世界的等等。這個內存使用就是一個應用佔有的地址空間,只是要應用程序要求的,就全算在這裏,而不管它真的用了沒有。寫程序怕出錯,又不在乎佔用的時候,多開點內存也是很正常的。
RES:resident memory usage。常駐內存。這個值就是該應用程序真的使用的內存,但還有兩個小問題,一是有些東西可能放在交換盤上了(SWAP),二是有些內存可能是共享的。
SHR:shared memory。共享內存。就是說這一塊內存空間有可能也被其他應用程序使用着;而Virt - Shr似乎就是這個程序所要求的並且沒有共享的內存空間。
DATA:數據佔用的內存。如果top沒有顯示,按f鍵可以顯示出來。這一塊是真正的該程序要求的數據空間,是真正在運行中要使用的。
最近使用top命令進行系統cpu和memory的監控,發現top的命令還是很強大的
# top
top - 05:47:41 up 3:03, 2 users, load average: 1.24, 1.39, 1.26
Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 506444k total, 380180k used, 126264k free, 37408k buffers
Swap: 0k total, 0k used, 0k free, 204136k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3695 root 25 0 94544 73m 2548 S 0.0 14.9 0:20.74 scand
top 的全屏對話模式可分爲3部分:系統信息欄、命令輸入欄、進程列表欄。
第一部分 -- 最上部的 系統信息欄 :
第一行:top - 05:47:41 up 3:03, 2 users, load average: 1.24, 1.39, 1.26
“05:47:41”:爲系統當前時刻,date查看。
“up 3:03”:爲系統啓動後到現在的運作時間,時間格式爲時:分。
“2 users”:爲當前登錄到系統的用戶,更確切的說是登錄到用戶的終端數 -- 同一個用戶同一時間對系統多個終端的連接將被視爲多個用戶連接到系統,這裏的用戶數也將表現爲終端的數目;
“load average: 1.24, 1.39, 1.26”:系統負載 ,即任務隊列的平均長度,後面的三個值分別爲1分鐘前、5分鐘前、15分鐘前到現在的平均數。
第二行:Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie
“67 total”:進程總數
“1 running”:正在運行的進程數
“28 sleeping”:睡眠的進程數
“0 stopped”:停止的進程數
“0 zombie”:殭屍進程數
第三行:Cpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
“0.7% us”:用戶進程佔用CPU百分比
“0.7% sy”:內核進程佔用CPU百分比
“0.0% ni”:用戶進程空間內改變過優先級的進程佔用CPU百分比
“98.7% id”:空閒CPU百分比
“0.0% wa”:等待輸入輸出的CPU時間百分比
“0.0% hi”:硬件中斷請求時間
“0.0% si”:軟終端請求時間
第四行:Mem: 506444k total, 380180k used, 126264k free, 37408k buffers
“506444k total”:物理內存總量
“380180k used”:使用的物理內存總量
“126264k free”:空閒內存總量
“37408k buffers”:用作內核緩存的內存量
第五行:Swap: 0k total, 0k used, 0k free, 204136k cached
“0k total”:交換區總量
“0k used”:使用的交換區總量
“0k free”:空閒交換區總量
“204136k cached”:緩衝的交換區總量
第二部分 -- 中間部分的內部命令提示欄(Swap所在行和PID所在行中間的空行):
top 運行中可以通過 top 的內部命令對進程的顯示方式進行交互式控制。內部命令如下表:
<空格> - 立刻刷新
s - 改變畫面更新頻率
l - 關閉或開啓第一部分第一行 top 信息的表示
t - 關閉或開啓第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m - 關閉或開啓第一部分第四行 Mem 和 第五行 Swap 信息的表示
c - 切換顯示命令名稱和完整命令行
N - 以 PID 的大小的順序排列表示進程列表
P - 以 CPU 佔用率大小的順序排列進程列表
M - 以內存佔用率大小的順序排列進程列表
T - 根據時間、累計時間排序
W - 將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法
h - 顯示幫助
n - 設置在進程列表所顯示進程的數量
q - 退出 top
第三部分 -- 進程列表欄:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID -- 進程id
PPID -- 父進程id
RUSER -- Real user name
UID -- 進程所有者的用戶id
USER -- 進程所有者的用戶名
GROUP -- 進程所有者的組名
TTY -- 啓動進程的終端名。不是從終端啓動的進程則顯示爲 ?
PR -- 優先級
NI -- nice值。負值表示高優先級,正值表示低優先級
P -- 最後使用的CPU,僅在多CPU環境 下有意義
%CPU -- 上次更新到現在的CPU時間佔用百分比
TIME -- 進程使用的CPU時間總計,單位秒
TIME+ -- 進程使用的CPU時間總計,單位1/100秒
%MEM -- 進程使用的物理內存 百分比
VIRT -- 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
SWAP -- 進程使用的虛擬內存中,被換出的大小,單位kb。
RES -- 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
CODE -- 可執行代碼佔用的物理 內存大小,單位kb
DATA -- 可執行代碼以外的部分(數據 段+棧)佔用的物理 內存大小,單位kb
SHR -- 共享內存大小,單位kb
nFLT -- 頁面錯誤次數
nDRT -- 最後一次寫入到現在,被修改過的頁面數。
S -- 進程狀態。
D =不可中斷的睡眠狀態
R =運行
S =睡眠
T =跟蹤/停止
Z =殭屍進程
COMMAND -- 命令名/命令行
WCHAN -- 若該進程在睡眠,則顯示睡眠中的系統函數名
Flags -- 任務標誌,參考 sched.h
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過
下面的快捷鍵來更改顯示內容。更改顯示內容通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最後按回車鍵確定。按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按回車鍵確定。按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。