目的:經常用top來監控linux的系統狀況,但列出的細節信息卻一知半解,基本只會看cpu idle ,找出一個時間來仔細分析一下這個命令中的細節。
1.查看多核或多cpu
2.top基本視圖
2.1 第一行
- 16:19:28--當前系統時間
- 4 days 32min 系統已經運行了4天32分鐘(在這期間沒有重啓)
- 5 users: 當前有5個用戶登錄系統
- load average;0.41, 0.44, 0.43 -- load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況
說明:
load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
2.2 第二行
- Tasks--任務(進程),系統現在共有323個進程
- running -- 正在運行
- sleeping -- 正在休眠
- stopped -- 停止的是0個
- zombie狀態(殭屍) -- 殭屍狀態的有1個!
如果發現了殭屍進程就要把它殺死:
第一步:找出來
ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'
或
ps -ef | grep "defunct"
第二步:結束進程
說明:
ps:ps命令用於獲取當前系統的進程信息.
-e:參數用於列出所有的進程
-o:參數用於設定輸出格式,這裏只輸出進程的stat(狀態信息)、ppid(父進程pid)、pid(當前進程的pid),cmd(即進程的可執行文件。
egrep:是linux下的正則表達式工具
'^[Zz]':這是正則表達式,^表示第一個字符的位置,[Zz],表示z或者大寫的Z字母,即表示第一個字符爲Z或者z開頭的進程數據,只所以這樣是因爲殭屍進程的狀態信息以Z或者z字母開頭。
2.3 第三行:cpu 狀態
- us -- 用戶空間佔用cpu的百分比
- sy -- 內核空間佔用CPU的百分比
- ni -- 改變過優先級的進程佔用CPU的百分比
- id -- 空閒CPU百分比
- wa -- IO等待佔用CPU的百分比
- hi -- 硬中斷(Hardware IRQ)佔用CPU的百分比
- si -- 軟中斷(Software Interrupts)佔用CPU的百分比
說明:
內核空間中存放的是內核代碼和數據,而進程的用戶空間中存放的是用戶程序的代碼和數據
2.4 第四行:內存狀態
- total -- 物理內存總量8GB
- used -- 使用中的內存總量7.6GB
- free -- 空閒內存總量372M
- buffers -- 緩存的內存量737M
2.5 第五行:swap 交換分區
- total -- 交換區總量
- used -- 使用的交換區總量
- free -- 空閒交換區總量
- cached -- 緩衝的交換區總量
說明:關於內存
不能用windows的內存概念理解這些數據,如果按windows的方式此臺服務器“危矣”:8G的內存總量只剩下372M的可用內存.
第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閒內存總量(free)是內核還未納入其管控範圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重複利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用爲此擔心。
第四行的free + 第四行的buffers + 第五行的cached,按這個公式此臺服務器的可用內存:
372976 + 737960 + 1484680 = 2595616,還有2.5G的可用內存。
2.6 第六行:空
2.7 第七行:各進程(任務)的狀態監控
- 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 — 進程名稱(命令名/命令行)
3.多核cpu的使用情況
方法:進入top基本視圖後,按‘1’
說明:
① 物理CPU
實際Server中插槽上的CPU個數
物理cpu數量,可以數不重複的 physical id 有幾個
~$ cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
1
② 邏輯CPU
Linux用戶對 /proc/cpuinfo 這個文件肯定不陌生. 它是用來存儲cpu硬件信息的
信息內容分別列出了processor 0 – n 的規格。這裏需要注意,如果你認爲n就是真實的cpu數的話, 就大錯特錯了
一般情況,我們認爲一顆cpu可以有多核,加上intel的超線程技術(HT), 可以在邏輯上再分一倍數量的cpu core出來
邏輯CPU數量=物理cpu數量 x cpu cores 這個規格值 x 2(如果支持並開啓ht)
備註一下:Linux下top查看的CPU也是邏輯CPU個數
~$ cat /proc/cpuinfo |grep "processor"|wc -l
8
③ CPU核數
一塊CPU上面能處理數據的芯片組的數量、比如現在的i5 760,是雙核心四線程的CPU、而 i5 2250 是四核心四線程的CPU
一般來說,物理CPU個數×每顆核數就應該等於邏輯CPU的個數,如果不相等的話,則表示服務器的CPU支持超線程技術
~$ cat /proc/cpuinfo |grep "cores"|uniq
cpu cores : 4
分析:
我現在的pc是1個cpu, 每個cpu有4個core, 支持超線程,所以顯示邏輯cpu爲8
4.top中的進程字段排序
默認排序:按照CPU的佔用量
改變排序列:通過”shift + >”或”shift + <”可以向右或左改變排序列
5.系統監控命令的補充
ps -eLf | grep process_name | wc -l
netstat -n | grep tcp | grep 偵聽端口 | wc -l