在性能測試時,會實時監控服務器進程資源佔用情況,top命令是Linux系統自帶的用於監控系統狀況的工具
一、命令行輸入top命令,返回下圖中的信息,上部分是系統狀態統計信息,下部分是進程信息
備註:top命令默認每間隔3秒刷新顯示,要手動刷新,可以輸入回車或者空格鍵,也可以用(top d 秒數 )命令來設置刷新顯示時間
各行代表的含義:
1、第一行:系統運行時間和平均負載
當前系統時間爲01:29:02;
up 4 day ,8:53 ----系統已運行時間爲4天8時53分,格式:天,時:分;
登陸4個用戶數;
load average----系統負載,三個數分別是1分鐘、5分鐘、15分鐘的負載情況。load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值,如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了;
2、第二行:任務(或進程)
共運行135個進程,1個運行中進程,134個進程休眠,停止狀態的進程是0個,僵死狀態的進程也是0個;
running----運行
sleep----休眠
stoped----停止
zombie----殭屍
3、第三行:cpu狀態
%us(user)----用戶空間佔用cpu的百分比(user:cpu運行未調整的優先級用戶進程的時間 )
%sy(system)----內核空間佔用cpu的百分比
%ni(nice)----改過的優先級的進程佔用cpu的百分比(nice:cpu運行已調整優先級的用戶進程的時間)
%id(idle)----空閒cpu百分比
%wa(IO wait)----等待IO佔用cpu的百分比
%hi----硬中斷佔用cpu的百分比
%si----軟中斷佔用cpu的百分比
%st(steal)----管理程序(hypervisor)爲另一個虛擬進程提供服務而等街待虛擬cpu百分比
4、第四行:內存狀態
total----物理內存總量
used----已使用的物理內存總量
free----空閒內存總量
buffers----緩存的內存量
5、第五行:交換分區狀態
total----交換分區總量
used----已使用的交換區總量
free----空閒交換區總量
cached----緩衝的交換區總量
備註:可用內存計算公式 = buffers + free + cached
6、第七行:各進程的狀態監控
PID----進程ID,進程的唯一標識符;
USER----進程所有者的實際用戶名;
PR----進程的調度優先級,這個字段的一些值是"rt",表示這些進程正在運行,PR(new)=PR(old)+nice,PR(new)值越小,優先級就越高,越早被執行;
NI----進程nice值,進程可被執行的優先級的修改正值,越小的值意味着越高的優先級,負值表示高優先級,正值表示低優先級
VIRT(virtual memory usage)----進程使用的虛擬內存,進程使用的虛擬內存總量,單位kb,虛擬內存是按照申請量來計算的,而不是按照實際使用量來計算的,VIRT=SWAP+RES;
RES(resident memory usage)----常駐內存,單位kb,RES=CODE+DATA;
SHR(shared memory)----共享內存,單位kb;
S----進程的狀態,它有以下不同的值:
- D(interruptible sleep)----不可中斷的睡眠
- R(running) ----運行中
- S(sleeping) ----睡眠
- T(traced or stopped) ----被跟蹤或已停止
- Z(zombie) ----殭屍
%CPU----自從上一次更新時到現在進程所使用的CPU時間百分比;
%MEM----進程使用的可用物理內存百分比;
TIME+ ---- 進程已使用的CPU時間,單位爲1/100秒,精確到百分之一秒;
COMMAND----運行進程所使用的命令,進程名稱(命令名/命令行);
默認情況下會顯示以上第七行常用的列名稱,如果以上列並不滿足自己的要求,可以按f(小寫)鍵選擇顯示其它列,
按f(小寫)鍵後進入下面的頁面,圖中紅框中可以選擇你所需的列
按 a-z(小寫) 即可顯示或隱藏對應的列,當選擇需要顯示的對應的列名稱後,列名稱前面會加有一個*號且從小寫字母變成大寫字母,選擇結束後按回車鍵;
如果需要改變列的顯示順序,按o(小寫)鍵,按 a-z (小寫)可以將相應的列向右移動,按 A-Z (大寫)可以將相應的列向左移動,結束後按回車鍵;
按 F(大寫) 或 O (大寫)鍵,然後按 a-z 可以將進程按照相應的列進行排序,如果按照進程已使用的時間來排序,那麼按F(大寫)鍵進入頁面,然後按m(小寫)鍵,最後按回車鍵
回到top命令行頁面,可以看到已按照進程所使用的時間來排序了
R(大寫) 鍵可以將當前的排序倒轉;
其它備選的列:
PPID----父進程ID
RUSER---- 真正的用戶名
UID---- 進程所有者的用戶id
GROUP----進程所有者的組名
TTY----啓動進程的終端名,不是從終端啓動的進程則顯示爲 ?
P----最後使用的CPU,僅在多CPU環境下有意義
SWAP----進程使用的虛擬內存中被換出的大小,單位kb
TIME----進程使用的CPU時間總計,單位秒
CODE----可執行代碼佔用的物理內存大小,單位kb
DATA----可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位kb
NFLT----頁面錯誤次數
NDRT----最後一次寫入到現在,被修改過的頁面數
WCHAN----若該進程在睡眠,則顯示睡眠中的系統函數名
FLags----任務標誌
二、top常用的選項
格式:top [選項]
b:批次檔模式,搭配 "n" 參數一起使用,可以用來將 top 的結果輸出到檔案內
d:指定每兩次屏幕信息刷新之間的時間間隔,當然用戶可以使用s交互命令來改變之;
p:通過指定監控進程ID來僅僅監控某個進程的狀態;
q:該選項將使top沒有任何延遲的進行刷新,如果調用程序有超級用戶權限,那麼top將以儘可能高的優先級運行;
S:指定累計模式;
s:使top命令在安全模式中運行,這將去除交互命令所帶來的潛在危險;
i:使top不顯示任何閒置或者僵死進程;
c:顯示整個命令行而不只是顯示命令名;
三、服務器監控中常用命令
1、顯示所有進程
top -ab -n 1
2、只顯示某一個進程名的所有進程信息
top -ab -n 1 | grep 進程名
3、監控java線程數
ps -eLf | grep java | wc -l
4、監控網絡客戶連接數
netstat -n | grep tcp | grep 偵聽端口 | wc -l
5、進程中線程數量
ls /proc/PID/task | wc -l
PID---進程ID