參考:https://www.cnblogs.com/zhoug2020/p/6336453.html
1、命令字段詳解
top命令的輸出如下
- 第一行:系統運行時間和平均負載
當前時間、系統已運行時間、當前登錄用戶的數量、最近5、10、15分鍾內的平均負載
- 第二行:任務
任務的總數、運行中(running)的任務、休眠(sleeping)中的任務、停止(stopped)的任務、僵屍狀態(zombie)的任務
- 第三行:cpu狀態
字段 | 字段釋義 |
us | user: 運行(未調整優先級的) 用戶進程的CPU時間 |
sy | system: 運行內核進程的CPU時間 |
ni | niced:運行已調整優先級的用戶進程的CPU時間 |
id | idle:空閑時間 |
wa | IO wait: 用於等待IO完成的CPU時間 |
hi | 處理硬件中斷的CPU時間 |
si | 處理軟件中斷的CPU時間 |
st | 這個虛擬機被hypervisor偷去的CPU時間(譯注:如果當前處於一個hypervisor下的vm,實際上hypervisor也是要消耗一部分CPU處理時間的) |
- 第四行:內存
全部可用內存、已使用內存、空閑內存、緩沖內存
- 第五行:swap
全部、已使用、空閑和緩沖交換空間
- 第七行至N行:各進程任務的的狀態監控
字段 | 釋義 |
PID | 進程ID,進程的唯一標識符 |
USER | 進程所有者的實際用戶名 |
PR | 進程的調度優先級。這個字段的一些值是'rt'。這意味這這些進程運行在實時態。 |
NI | 進程的nice值(優先級)。越小的值意味着越高的優先級。負值表示高優先級,正值表示低優先級 |
VIRT | virtual memory usage 虛擬內存,進程使用的虛擬內存。進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES 1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等 |
RES | resident memory usage 常駐內存,駐留內存大小。駐留內存是任務使用的非交換物理內存大小。進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA 1、進程當前使用的內存大小,但不包括swap out |
SHR | SHR:shared memory 共享內存 1、除了自身進程的共享內存,也包括其他進程的共享內存 |
S | 這個是進程的狀態。它有以下不同的值:
|
%CPU | 自從上一次更新時到現在任務所使用的CPU時間百分比。%CPU顯示的是進程占用一個核的百分比,而不是整個cpu(N核)的百分比,有時候可能大於100,那是因為該進程啟用了多線程占用了多個核心,所以有時候我們看該值得時候會超過100%,但不會超過總核數*100 |
%MEM | 進程使用的可用物理內存百分比 |
TIME+ | 任務啟動后到現在所使用的全部CPU時間,精確到百分之一秒 |
COMMAND | 運行進程所使用的命令。進程名稱(命令名/命令行) |
2、交互命令
按“h”或者“?”,會顯示幫助,如下
Z:改變顏色;B:加粗
t:顯示和隱藏任務/cpu信息;m:內存信息
1:監控每個邏輯CPU的狀況;
f:進入字段顯示配置模式,可增加或者移除顯示字段,按相應的字母新增或去除;o:進入字段順序設置模式,可配置顯示位置順序,按相應的字母往下移動,按“shift+相應的字母”往上移動 ---------常用
F:進入字段排序配置模式,可設置排序的字段;
R:正常排序/反向排序;
s:設置刷新的時間--------常用
u:輸入用戶,顯示用戶的任務
i:忽略閑置和僵死進程。這是一個開關式命令。
r:重新安排一個進程的優先級別。系統提示用戶輸入需要改變的進程PID以及需要設置的進程優先級值。輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先權。默認值是10。
c:切換顯示命令名稱和完整命令行。
M:根據駐留內存大小進行排序。-------------常用
P:根據CPU使用百分比大小進行排序。-----------常用
H:顯示線程
3、常用參數與命令
d:指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。
p:通過指定監控進程ID來僅僅監控某個進程的狀態。
top –p PID
-H: 設置線程模式
顯示某個進程所有活躍的線程消耗情況
top -H -p pid
按f、再按j把P調出來,P代表”Last used CPU”
設置線程模式下:第二行的tasks指的是線程個數
4、疑問
如下這個java進程設置的最大可用內存為128m,但是這里virt達到了2478m,RES達到了295m,為什么?
參考答案:http://www.cnblogs.com/seasonsluo/p/java_virt.html
結論:
VIRT高是因為分配了太多地址空間導致。
一般來說不用太在意VIRT太高,因為你有16EB的空間可以使用。