linux资源查看命令详解大全[top|vmstat|free]
???? TOP命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況。
?????? TOP是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程序為止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.
?
| t | 顯示摘要信息開關. |
| m | 顯示內存信息開關. |
| A | 分類顯示系統不同資源的使用大戶。有助于快速識別系統中資源消耗多的任務。 |
| f | 添加刪除所要顯示欄位. |
| o | 調整所要顯示欄位的順序. |
| r | 調整一個正在運行的進程Nice值. |
| k | 結束一個正在運行的進程. |
| z | 彩色/黑白顯示開關 |
?
一. ?TOP前五行統計信息
統計信息區前五行是系統整體的統計信息。
?
1. 第一行是任務隊列信息
同 uptime??命令的執行結果:
[root@localhost ~]# uptime
?13:22:30 up 8 min,? 4 users,? load average: 0.14, 0.38, 0.25
?
其內容如下:
| 12:38:33 | 當前時間 |
| up 50days | 系統運行時間,格式為時:分 |
| 1 user | 當前登錄用戶數 |
| load average: 0.06, 0.60, 0.48 | 系統負載,即任務隊列的平均長度。?三個數值分別為??1分鐘、5分鐘、15分鐘前到現在的平均值。 |
?
2. 第二、三行為進程和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 | ? |
| 0.0% si | ? |
?
3. 第四五行為內存信息。
內容如下:
| Mem: 191272k total | 物理內存總量 |
| 173656k used | 使用的物理內存總量 |
| 17616k free | 空閑內存總量 |
| 22052k buffers | 用作內核緩存的內存量 |
| Swap: 192772k total | 交換區總量 |
| 0k used | 使用的交換區總量 |
| 192772k free | 空閑交換區總量 |
| 123988k cached | 緩沖的交換區總量。?內存中的內容被換出到交換區,而后又被換入到內存,但使用過的交換區尚未被覆蓋,?該數值即為這些內容已存在于內存中的交換區的大小。相應的內存再次被換出時可不必再對交換區寫入。 |
?
?
二. ?進程信息
?
| 列名 | 含義 |
| PID | 進程id |
| PPID | 父進程id |
| RUSER | Real user name |
| UID | 進程所有者的用戶id |
| USER | 進程所有者的用戶名 |
| GROUP | 進程所有者的組名 |
| TTY | 啟動進程的終端名。不是從終端啟動的進程則顯示為 ? |
| PR | 優先級 |
| NI | nice值。負值表示高優先級,正值表示低優先級 |
| P | 最后使用的CPU,僅在多CPU環境下有意義 |
| %CPU | 上次更新到現在的CPU時間占用百分比 |
| TIME | 進程使用的CPU時間總計,單位秒 |
| TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
| %MEM | 進程使用的物理內存百分比 |
| VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES。 虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術的系統使得大型程序的編寫變得更容易,對真正的物理內存(例如RAM)的使用也更有效率。 注意:虛擬內存不只是“用磁盤空間來擴展物理內存”的意思——這只是擴充內存級別以使其包含硬盤驅動器而已。把內存擴展到磁盤只是使用虛擬內存技術的一個結果,它的作用也可以通過覆蓋或者把處于不活動狀態的程序以及它們的數據全部交換到磁盤上等方式來實現。對虛擬內存的定義是基于對地址空間的重定義的,即把地址空間定義為“連續的虛擬內存地址”,以借此“欺騙”程序,使它們以為自己正在使用一大塊的“連續”地址。 |
| SWAP | 進程使用的虛擬內存中,被換出的大小,單位kb。 |
| RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
| CODE | 可執行代碼占用的物理內存大小,單位kb |
| DATA | 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb |
| SHR | 共享內存大小,單位kb |
| nFLT | 頁面錯誤次數 |
| nDRT | 最后一次寫入到現在,被修改過的頁面數。 |
| S | 進程狀態。 |
| COMMAND | 命令名/命令行 |
| WCHAN | 若該進程在睡眠,則顯示睡眠中的系統函數名 |
| Flags | 任務標志,參考 sched.h |
?
free
轉自 http://os.51cto.com/art/201004/193160.htm
51CTO編輯推薦:Linux監控工具大全
下面是對這些數值的解釋:
total:總計物理內存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內存總額。
Buffers/cached:磁盤緩存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。 這兩個的區別在于使用的角度來看,第一行是從OS的角度來看,因為對于OS,buffers/cached 都是屬于被使用,所以他的可用內存是1,021,004KB,已用內存是513,060KB,其中包括,內核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是從應用程序角度來看,對于應用程序來說,buffers/cached 是等于可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。
我們通過free命令查看機器空閑內存時,會發現free的值很小。這主要是因為,在Linux系統中有這么一種思想,內存不用白不用,因此它盡可能的cache和buffer一些數據,以方便下次使用。但實際上這些內存也是可以立刻拿來使用的。
vmstat
[轉自 http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html]
vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。
一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數,如:
root@ubuntu:~# vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 02表示每個兩秒采集一次服務器狀態,1表示只采集一次。
實際上,在應用過程中,我們會在一段時間內一直監控,不想監控直接結束vmstat就行了,例如:
root@ubuntu:~# vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 00 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 00 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 00 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 01 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0這表示vmstat每2秒采集數據,一直采集,直到我結束程序,這里采集了5次數據我就結束了程序。
好了,命令介紹完畢,現在開始實戰講解每個參數的意思。
r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什么程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
swpd 虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。
free ? 空閑的物理內存的大小,我的機器內存總共8G,剩余3415M。
buff ? Linux/Unix系統是用來存儲,目錄里面有什么內容,權限等的緩存,我本機大概占用300多M
cache cache直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)
si ?每秒從磁盤讀入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。
so ?每秒虛擬內存寫入磁盤的大小,如果這個值大于0,同上。
bi ?塊設備每秒接收的塊數量,這里的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什么IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒
bo?塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調整。
in?每秒CPU的中斷次數,包括時間中斷
cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。
us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。
sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
id ?空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
wt 等待IO CPU時間。
總結
以上是生活随笔為你收集整理的linux资源查看命令详解大全[top|vmstat|free]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++代码9
- 下一篇: 3. oracle学习入门系列之三Uni