top命令經常用來監控linux的系統狀況,比如cpu、記憶體的使用等。
top命令執行結果如所示:
top前五行統計資訊
第一行:
15:48:01 |
表示當前系統時間。 |
up 391 days, 22:56 |
表示系統已經運行了391天22小時56分鐘(在這期間沒有重啟過) |
1 users |
表示當前有1個使用者登入系統 |
load average: 0.08, 0.13, 0.16 |
這三個數分別是1分鐘、5分鐘、15分鐘系統的負載情況。load average資料是每隔5秒鐘檢查一次活躍的進程數,然後按特定演算法計算出的數值。 |
第二行: 進程資訊
95 total |
表示共有95個進程 |
1 running |
正在運行中的進程數為1個 |
94 sleeping |
睡眠的進程數為94個 |
0 stopped |
停止的進程數為0個 |
0 zombie |
殭屍進程數為0個 |
第三行:CPU資訊
0.7%us |
表示使用者空間佔用CPU的百分比為0.7 |
0.1%sy |
表示核心空間佔用CPU的百分比為0.1 |
0.0%ni |
表示使用者進程空間內改變過優先順序的進程佔用CPU百分比為0 |
98.8%id |
表示空閑CPU百分比為98.8 |
0.4%wa |
表示IO等待佔用CPU的百分比為0.4 |
0.0%hi |
表示IO等待佔用CPU的百分比為0 |
0.0%si |
表示非強制中斷(Software Interrupts)佔用CPU的百分比 |
0.0%st |
? |
當us值過高時,表示啟動並執行應用消耗大量的CPU。java應用造成us高的原因主要是線程一直處於可運行(Runnable)狀態,通常這些線程在執行無阻塞、迴圈、正則或純粹的計算等任務造成的;另外一個可能也會造成us高的原因是頻繁GC。
當sy值高時,表示linux花費了更多的時間在進行java線程切換。java應用造成這種現象的主要原因是啟動的線程比較多,且這些線程多數處於不斷的阻塞(例如鎖等待,IO等待狀態)和執行狀態的變化過程中,這就導致了作業系統要不斷地切換執行的線程,產生大量的線程環境切換。
(上面紅色的結論來自:http://blog.csdn.net/axman/article/details/7104819)
第四行:記憶體資訊
5242880k total |
實體記憶體總量 |
4656748k used |
使用中的記憶體總量 |
586132k free |
空閑記憶體總量 |
262660k buffers |
用作核心緩衝的記憶體量 |
第五行:swap交換分區資訊
2097144k total |
交換區總量 |
989520k used |
使用的交換區總量 |
1107624k free |
空閑交換區總量 |
471860k cached |
緩衝的交換區總量 |
top第七行開始為各進程狀態監控
預設情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。各列的含義如下:
PID |
進程PID |
USER |
進程所有者 |
PR |
進程優先順序。 |
NI |
nice值。負值表示高優先順序,正值表示低優先順序 |
VIRT |
進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES |
RES |
進程使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA |
SHR |
共用記憶體大小,單位kb |
S |
進程狀態。D=不可中斷的睡眠狀態, R=運行, S=睡眠, T=跟蹤/停止, Z=殭屍進程 |
%CPU |
上次更新到現在的CPU時間佔用百分比 |
%MEM |
進程使用的實體記憶體百分比 |
TIME+ |
進程使用的CPU時間總計,單位1/100秒 |
COMMAND |
進程名稱(命令名/命令列) |
可以用快速鍵更改顯示內容:
(1)更改顯示內容:通過 f鍵可以選擇顯示的內容。
按 f 鍵之後會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最後按斷行符號鍵確定。
(2)按o鍵可以改變列的顯示順序。
按小寫 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按斷行符號鍵確定。
按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。
(3) shift + m 根據記憶體佔用從大到小排列;shift + p 根據cpu佔用從大到小排列
設定完按斷行符號返回介面。
上面展示的是進程的情況,還可以通過命令:top -p PID -H來查看進行對應的線程,如: