歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 系統監控、診斷工具之 top命令詳解

Linux 系統監控、診斷工具之 top命令詳解

日期:2017/2/28 14:24:59   编辑:Linux教程

目錄

(1)系統、任務統計信息:
(2)進程、 cpu 統計信息:
(3)最後兩行為內存信息:
3.1 實際的程序可用內存數怎麼算呢?
3.2 程序已用內存數又怎麼算呢?
3.3 怎麼判斷系統是否內存不足呢?
3.4 buffer 與cache 的區別
(4)進程信息區:
(5)查看指定列
5.1 f 鍵選擇顯示內容
5.2 o 鍵改變顯示順序
5.3 F/O 鍵將進程按列排序
(6)常用交互命令
(7)最後的技能:top 命令小技巧
(8)Refer:

接觸 Linux 的人對於 top 命令可能不會陌生(不同系統名字可能不一樣,如 IBM 的 aix 中叫 topas ),它的作用主要用來監控系統實時負載率、進程的資源占用率及其它各項系統狀態屬性是否正常。

下面我們先來看張 top 截圖:

實用的top命令 http://www.linuxidc.com/Linux/2014-11/109769.htm

為什麼 Linux 的 htop 命令完勝 top 命令 http://www.linuxidc.com/Linux/2014-06/102626.htm

Ubuntu下最強大的進程監視器htop使用 http://www.linuxidc.com/Linux/2013-05/85030.htm

CentOS 6.5中安裝htop進程管理監控工具 http://www.linuxidc.com/Linux/2014-03/97775.htm

top命令引起系統負載升高 http://www.linuxidc.com/Linux/2014-11/109997.htm

(1)系統、任務統計信息:

前 8 行是系統整體的統計信息。第 1 行是任務隊列信息,同 uptime 命令的執行結果。其內容如下:

01:06:48 當前時間 up 1:22 系統運行時間,格式為時:分 1 user 當前登錄用戶數 load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。

三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

注意:這三個值可以用來判定系統是否負載過高——如果值

持續大於系統 cpu 個數,就需要優化你的程序或者架構了。

(2)進程、 cpu 統計信息:

第 2~6 行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:

Tasks: 29 total 進程總數 1 running 正在運行的進程數 28 sleeping 睡眠的進程數 0 stopped 停止的進程數 0 zombie 僵屍進程數 Cpu(s): 0.3% us 用戶空間占用CPU百分比 1.0% sy 內核空間占用CPU百分比 0.0% ni 用戶進程空間內改變過優先級的進程占用CPU百分比 98.7% id 空閒CPU百分比 0.0% wa 等待輸入輸出的CPU時間百分比 0.0% hi Hardware IRQ 0.0% si Software IRQ

注:

(1)IRQ: IRQ全稱為Interrupt Request,即是“中斷請求”的意思。

(2)st(Steal Time):Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor. It's only relevant in virtualized environments. It represents time when the real CPU was not available to the current virtual machine - it was "stolen" from that VM by the hypervisor (either to run another VM, or for its own needs).

So, relatively speaking, what does this mean? A high steal percentage may mean that you may be outgrowing your virtual machine with your hosting company. Other virtual machines may have a larger slice of the CPU’s time and you may need to ask for an upgrade in order to compete. Also, a high steal percentage may mean that your hosting company is overselling virtual machines on your particular server. If you upgrade your virtual machine and your steal percentage doesn’t drop, you may want to seek another provider. A low steal percentage can mean that your applications are working well with your current virtual machine. Since your VM is not wrestling with other VM’s constantly for CPU time, your VM will be more responsive. This may also suggest that your hosting provider is underselling their servers, which is definitely a good thing.0.0% sisi(Software Interrupts)

(3)最後兩行為內存信息:

Mem: 191272k total 物理內存總量 173656k used 使用的物理內存總量 17616k free 空閒內存總量 22052k buffers 用作內核緩存的內存量 Swap: 192772k total 交換區總量 0k used 使用的交換區總量 192772k free 空閒交換區總量 123988k cached 緩沖的交換區總量。
內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於內存中的交換區的大小。
相應的內存再次被換出時可不必再對交換區寫入。

PS:如何計算可用內存和已用內存?

除了 free -m 之外,也可以看 top:

Mem:    255592k total,   167568k used,    88024k free,    25068k buffers
Swap:   524280k total,        0k used,   524280k free,    85724k cached

3.1 實際的程序可用內存數怎麼算呢?

The answer is: free + (buffers + cached)

88024k + (25068k + 85724k) = 198816k

3.2 程序已用內存數又怎麼算呢?

The answer is: used – (buffers + cached)

167568k – (25068k + 85724k) = 56776k

3.3 怎麼判斷系統是否內存不足呢?

如果你的 swap used 數值大於 0 ,基本可以判斷已經遇到內存瓶頸了,要麼優化你的代碼,要麼加內存。

3.4 buffer 與cache 的區別

A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 從應用程序角度來看,buffers/cached 是等於可用的,因為buffer/cached是為了提高文件讀寫的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存 = 系統free memory + buffers + cached.

buffers是指用來給塊設備做的緩沖大小,他只記錄文件系統的metadata以及 tracking in-flight pages.
cached是用來給文件做緩沖。
那就是說:buffers是用來存儲,目錄裡面有什麼內容,權限等等。
而cached直接用來記憶我們打開的文件,如果你想知道他是不是真的生效,你可以試一下,先後執行兩次命令#man X ,你就可以明顯的感覺到第二次的開打的速度快很多。

實驗:在一台沒有什麼應用的機器上做會看得比較明顯。記得實驗只能做一次,如果想多做請換一個文件名。

#free
#man X
#free
#man X
#free
你可以先後比較一下free後顯示buffers的大小。
另一個實驗:
#free
#ls /dev
#free
你比較一下兩個的大小,當然這個buffers隨時都在增加,但你有ls過的話,增加的速度會變得快,這個就是buffers/chached的區別。
因為Linux將你暫時不使用的內存作為文件和數據緩存,以提高系統性能,當你需要這些內存時,系統會自動釋放(不像windows那樣,即使你有很多空閒內存,他也要訪問一下磁盤中的pagefiles)

(4)進程信息區:

統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。

序號 列名 含義 a PID 進程id b PPID 父進程id c RUSER Real user name d UID 進程所有者的用戶id e USER 進程所有者的用戶名 f GROUP 進程所有者的組名 g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ? h PR 優先級 i NI nice值。負值表示高優先級,正值表示低優先級 j P 最後使用的CPU,僅在多CPU環境下有意義 k %CPU 上次更新到現在的CPU時間占用百分比 l TIME 進程使用的CPU時間總計,單位秒 m TIME+ 進程使用的CPU時間總計,單位1/100秒 n %MEM 進程使用的物理內存百分比 o VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES p SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。 q RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA r CODE 可執行代碼占用的物理內存大小,單位kb s DATA 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb t SHR 共享內存大小,單位kb u nFLT 頁面錯誤次數 v nDRT 最後一次寫入到現在,被修改過的頁面數。 w S 進程狀態。
D=不可中斷的睡眠狀態
R=運行
S=睡眠
T=跟蹤/停止
Z=僵屍進程 x COMMAND 命令名/命令行 y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名 z Flags 任務標志,參考 sched.h

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-12/110563p2.htm

Copyright © Linux教程網 All Rights Reserved