文章目錄
大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第45篇文章。
今天我們來聊聊在系統管理中的另外一個命令-top命令。
top命令是我們在日常工作中用的比較多的一個,學會使用top,就相當於有了一把趁手的兵器,上可九天攬月,下可五洋捉鱉。
1. 先睹爲快
執行完top命令之後,顯示結果如下圖,參數比較多,我們細細道來
我把開頭的五行截圖下來:
2. 第一行的含義:
信息 | 含義 |
---|---|
15:29:56 | 當前時間 |
up 6days | 運行了6Tina |
4users | 當前登錄用戶數 |
load average | 系統負載,三個數值分別表示1分鐘,5分鐘,15分鐘前到現在的平均值 |
load average詳解
load average: 指的是平均負載,在Linux當中,就是系統負載的平均值,它主要是將正在運行的線程對系統的需求顯示爲平均運行數和等待線程數。
如果平均值爲0.0 表示系統處於空閒狀態。
一般很多工具在使用這個load average的時候都會選擇1分鐘,5分鐘和15分鐘的平均值, 這裏有個技巧:
-** 如果1min平均值高於5分鐘或者15分鐘的平均值,表示負載在增加 **
- 如果1分鐘平均值低於5分或者15分鐘的平均值,表示負載在減少。
通過上面的技巧我們很容易判斷當前負載是在持續增加還是減少,如果持續增加我們只需要判斷當前是否達到了最大負載的閾值, 持續減少,我們幾乎不用再去介入,當然你想去研究下爲什麼15分鐘之前的負載突然增高了,也是可以的。
有很多論文上說,這裏的load averages指的是系統負載,但我們達不到應用層,所以還是認爲是cpu的負載吧。
load averages反應的是cpu的負載,其實是不準確的, 準確的說,load averages
反應的是System load averages. 檢測的是正在運行和等待運行的線程數,包括cpu,磁盤,不間斷鎖等等。
我們可以這麼理解:
當load averages較高的情況下,說明等待運行的任務比較低多,因此輪到該任務運行的等待時間就會出現較大延遲,然後反應在負載上就成了負載變高
經驗值:
單核心,1分鐘的系統平均負載不要超過3,就是ok的。
所以:
cpu 核心數 | load averages | 負載情況 |
---|---|---|
1 | 大於3 | 負載過高 |
4 | 大於12 | 負載過高 |
注: 這裏的cpu核心指的是邏輯核心數
怎麼查看邏輯核心數?
方法一:
使用top命令,進入後,按1就可以看到cpu核心數。
方法二:
[root@zmgaosh ~]# cat /proc/cpuinfo | grep ‘processor’ | sort | uniq | wc -l
2
3. 第二行和第三行的含義
信息 | 含義 |
---|---|
Tasks:108 total | 服務器的進程總數 |
1 running | 正在運行的進程數 |
106 sleeping | 睡眠的進程數 |
1 stopped | 停止的進程數 |
0 zombie | 殭屍進程數 |
%Cpu(s):1.2us | 系統用戶進程使用cpu百分比 |
1.7sy | 內核中進程佔用cpu百分比 |
0.0ni | 用戶進程數空間內,改變過優先級的進程 佔用CPU的百分比 |
97.2 id | 空閒cpu百分比 |
0,0wa | cpu等待IO完成的時間總量 |
0.0 hi | 硬中斷佔cpu的百分比,也就是硬中斷造成cpu開銷是多少 |
0.0si | 軟中斷佔CPU的百分比,也就是軟中斷造成cpu開銷是多少 |
0.0st | 虛擬機佔用物理機的時間 |
4. 內存信息: 第四行和第五行的詳細信息
信息 | 含義 |
---|---|
Mem | 物理內存總量 |
2094204free | 空閒內存總量 |
308472 used | 使用的物理內存總量 |
1477184 buff/cache | 內核緩存的內存量 |
swap: 0 total | 交換區總量 |
0 free | 空間交換區總量 |
0used | 使用的交換分區 |
3273356 avail mem | 總的可利用內存量 |
5. 進程信息(第7行)
1)每列的含義
列名 | 含義 |
---|---|
PID | 進程id |
USER | 進程所有者的用戶名 |
PR | 優先級(由內核動態調整),用戶不能 |
NI | 進程優先級。 nice值。負值表示高優先級,正值表示低優先級,用戶可以自己調整 |
VIRT | (virtual memory usage) 虛擬內存,是進程正在使用的所有內存(ps中標爲VSZ) |
RES | (resident memory usage) 是進程所使用的物理內存。實際實用內存(ps中標爲RSS) |
SHR | 共享內存大小,單位kb |
S | 進程狀態。 |
%CPU | 上次更新到現在的CPU時間佔用百分比 |
%MEM | 進程使用的物理內存百分比 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
COMMAND | 命令名/命令行 |
參數詳解
面試題: VIRT ,RES,SHR這三個值分別代表什麼?
VIRT:virtual memory usage 虛擬內存
1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等
2、假如進程申請100m的內存,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量RES:resident memory usage 常駐內存
1、進程當前使用的內存大小,但不包括swap out 2、包含其他進程的共享
3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反 4、關於庫佔用內存的情況,它只統計加載的庫文件所佔內存大小SHR:shared memory 共享內存
1、除了自身進程的共享內存,也包括其他進程的共享內存
2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小 3、計算某個進程所佔的物理內存大小公式:RES – SHR 4、swap
out後,它將會降下來
其實知道了這三個值代表什麼也並沒什麼用,最重要的是需要知道下面這句話:
VIRT值最高的進程就是內存使用最多的進程
如果服務器特別卡,你用top排查,那個VIRT數值最大的進程就是元兇,抓住它
top常用的快捷鍵
默認3s刷新一次,按s修改刷新時間
快捷鍵 | 作用 |
---|---|
q | 退出 |
s | 修改刷新時間,默認3秒刷新一次,按空格立即刷新 |
P | 按CPU排序 |
M | 按內存排序 |
T | 按時間排序 |
p | 進程IP,查看某個進程狀態 |
1 | 顯示每個內核的CPU使用率 |
u/U | 指定顯示的用戶 |
h | 幫助 |
top常用舉例
1) 找出系統中使用cpu最多的進程
運行top , 找出使用CPU最多的進程 ,按大寫的P,可以按CPU使用率來排序顯示
2) 查看gaosh用戶的進程內存使用情況
[root@zmgaosh ~]# top -u gaosh
3) 修改成5秒刷新一次
top -d 5
4) 監控指定進程,比如監控PID爲1225的進程
[root@zmgaosh ~]# top -p 1225
總結:
top 命令是我們日常工作中用的比較多的一個命令, 學會看幾個重要的參數即可,比如load averages,比如查看佔用內存最多的進程等
我是高勝寒,一個在教培行業不忘初心的人, 關注我,一起學習,歡迎點贊收藏,我們下篇文章再見!