Linux中的top細節

目的:經常用top來監控linux的系統狀況,但列出的細節信息卻一知半解,基本只會看cpu idle 尷尬,找出一個時間來仔細分析一下這個命令中的細節。

1.查看多核或多cpu

$ cat /proc/cpuinfo

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"
第二步:結束進程
kill -9 父進程pid號

說明:
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.系統監控命令的補充
  • 監控 process_name 線程數:

ps -eLf | grep process_name | wc -l

  • 監控網絡客戶連接數:

netstat -n | grep tcp | grep 偵聽端口 | wc -l





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章