TOP
該命令會查看系統的各項指標情況
經常用來監控linux的系統狀況,比如cpu、內存的使用,程序員基本都知道這個命令,但比較奇怪的是能用好它的人卻很少,例如top監控視圖中內存數值的含義就有不少的曲解。
本文通過一個運行中的WEB服務器的top監控截圖,講述top視圖中的各種數據的含義,還包括視圖中各進程(任務)的字段的排序。
第一行:
10:08:45 — 當前系統時間
10 days, 3:05 — 系統已經運行了10天3小時5分鍾(在這期間沒有重啟過)
1 users — 當前有1個用戶登錄系統
load average: 0.00, 0.00, 0.00 — load average后面的三個數分別是1分鍾、5分鍾、15分鍾的負載情況。
load average數據是每隔5秒鍾檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行:
Tasks — 任務(進程),系統現在共有135個進程,其中處於運行中的有1個,134個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。
第三行:cpu狀態
0.3% us — 用戶空間占用CPU的百分比。
0.0% sy — 內核空間占用CPU的百分比。
0.0% ni — 改變過優先級的進程占用CPU的百分比
99.7% id — 空閑CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中斷(Hardware IRQ)占用CPU的百分比
0.0% si — 軟中斷(Software Interrupts)占用CPU的百分比
在這里CPU的使用比率和windows概念不同,如果你不理解用戶空間和內核空間,需要充充電了。
第四行:內存狀態
3808060k total — 物理內存總量(4GB)
3660048k used — 使用中的內存總量(3.6GB)
148012k free — 空閑內存總量(148M)
359760k buffers — 緩存的內存量 (359M)
第五行:swap交換分區
4184924k total — 交換區總量(4G)
0k used — 使用的交換區總量(0M)
4184924k free — 空閑交換區總量(4G)
2483956k cached — 緩沖的交換區總量(2483M)
第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。
如果出於習慣去計算可用內存數,這里有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached,按這個公式此台服務器的可用內存:148M+259M+2483M = 2990M。
對於內存監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
第六行是空行
第七行以下:各進程(任務)的狀態監控
PID — 進程id
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 — 進程名稱(命令名/命令行)
更多可以查看這里:https://blog.csdn.net/xtggbmdk/article/details/82818023
查看docker容器的內存占用
使用docker stats命令可以查看容器的內存,但是有時候docker stats命令獲得的數據可能准確,可以參考下面這種方式
使用docker ps可以查看到容器的id
再使用ps -ef 找到容器對應的進程
獲得容器對應的pid后,就可以使用top、pmap、ps等查看進程內存的命令查看容器的內存占用情況了
top
top -p 5140
內容解釋
PID:進程的ID
USER:進程所有者
PR:進程的優先級別,越小越優先被執行
NInice:值
VIRT:進程占用的虛擬內存
RES:進程占用的物理內存
SHR:進程使用的共享內存
S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
%CPU:進程占用CPU的使用率
%MEM:進程使用的物理內存和總內存的百分比
TIME+:該進程啟動后占用的總的CPU時間,即占用CPU使用時間的累加值。
COMMAND:進程啟動命令名稱
更多情況請查看這里:https://blog.csdn.net/Mr_rain/article/details/83111422