Linux top命令的用法詳細詳解


參考:https://www.cnblogs.com/zhoug2020/p/6336453.html

1、命令字段詳解

top命令的輸出如下

image

  • 第一行:系統運行時間和平均負載

當前時間、系統已運行時間、當前登錄用戶的數量、最近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、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等
2、假如進程申請100m的內存,但實際只使用了10m,那么它會增長100m,而不是實際的使用量

RES

resident memory usage 常駐內存,駐留內存大小。駐留內存是任務使用的非交換物理內存大小。進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA

1、進程當前使用的內存大小,但不包括swap out
2、包含其他進程的共享
3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反
4、關於庫占用內存的情況,它只統計加載的庫文件所占內存大小

SHR

SHR:shared memory 共享內存

1、除了自身進程的共享內存,也包括其他進程的共享內存
2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小
3、計算某個進程所占的物理內存大小公式:RES – SHR
4、swap out后,它將會降下來

S

這個是進程的狀態。它有以下不同的值:

  • D - 不可中斷的睡眠態。
  • R – 運行態
  • S – 睡眠態
  • T – 被跟蹤或已停止
  • Z – 僵屍態
%CPU 自從上一次更新時到現在任務所使用的CPU時間百分比。%CPU顯示的是進程占用一個核的百分比,而不是整個cpu(N核)的百分比,有時候可能大於100,那是因為該進程啟用了多線程占用了多個核心,所以有時候我們看該值得時候會超過100%,但不會超過總核數*100
%MEM 進程使用的可用物理內存百分比
TIME+ 任務啟動后到現在所使用的全部CPU時間,精確到百分之一秒
COMMAND 運行進程所使用的命令。進程名稱(命令名/命令行)

2、交互命令

按“h”或者“?”,會顯示幫助,如下

image

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”

image

設置線程模式下:第二行的tasks指的是線程個數

image


4、疑問

如下這個java進程設置的最大可用內存為128m,但是這里virt達到了2478m,RES達到了295m,為什么?

image

參考答案:http://www.cnblogs.com/seasonsluo/p/java_virt.html

結論:

  • VIRT高是因為分配了太多地址空間導致。
  • 一般來說不用太在意VIRT太高,因為你有16EB的空間可以使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM