Linux中top和free命令(6/15)
top:命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.
該命令可以按CPU使用.內存使用和執行時間對任務進行排序;
而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況。退出 top 的命令為 q (在 top 運行中敲 q 鍵一次)
- 0> top -u pso
統計信息區前五行是系統整體的統計信息。第一行是任務隊列信息,同 uptime 命令的執行結果。其內容如下:
01:06:48 當前時間
up 1:22 系統開機到現在的運行時長,單位:分
1 user 當前登錄用戶數
load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。
三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:
- Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
Tasks “127 total” 進程總數
“1 running” 正在運行的進程數
“125 sleeping” 睡眠的進程數
“0 stoped” 停止的進程數
“0 zombie” 僵屍進程數
Cpu(s): 1.8%us, 0.5%sy, 0.0%ni, 97.1%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st
Cpus 分別表示了 CPU 當前的使用率;
1.8%us 用戶空間占用CPU百分比
0.5%sy 內核空間占用CPU百分比
0.0%ni 用戶進程空間內改變過優先級的進程占用CPU百分比
97.1%id 空閑CPU百分比
0.0%wa 等待輸入輸出的CPU時間百分比
0.0%hi
0.5%si
0.0%st
Mem: 8057552k total, 7905920k used, 151632k free, 397224k buffers
Mem 分別表示了內存總量、當前使用量、空閑內存量、以及緩沖使用中的內存量;
8057552k total 物理內存總量
7911076k used 使用的物理內存總量
146476k free 空閑內存總量
395284k buffers 用作內核緩存 的內存量
- Swap: 8191996k total, 82588k used, 8109408k free, 2308104k cached
Swap 表示類別同Mem,但此處反映著交換分區(Swap)的使用情況。通常,交換分區(Swap)被頻繁使用的情況,將被視作物理內存不足而造成的。
8191996k total交換區總量
83008k used 使用的交換區總量
8108988k free 空閑交換區總量
2315284k cached緩沖的交換區總量。
內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於內存中 的交換區的大小。 相應的內存再次被換出時可不必再對交換區寫入。
第二部分 -- 中間部分的內部命令提示欄:
top 運行中可以通過 top 的內部命令對進程的顯示方式進行控制。
內部命令如下:
<空格> 立刻刷新
s 改變畫面更新頻率
l 關閉/開啟第一部分 top 信息的表示
t 關閉/開啟第一部分Tasks 和 Cpus 信息的表示
m 關閉/開啟第一部分Mem 和 Swap 信息的表示
h 顯示幫助
n 設置在進程列表所顯示進程的數量
c 切換顯示命令名稱和完整命令行
q 退出 top
N 以 PID 的大小的順序排列表示進程列表
P 以 CPU 占用率大小的順序排列進程列表
M 以內存占用率大小的順序排列進程列表
T 根據時間、累計時間排序
W 將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法。
第三部分 -- 最下部分的進程列表欄:
以 PID 區分的進程列表將根據所設定的畫面更新時間定期的更新
%CPU:
%MEM:
TIME+:
COMMAND:進程啟動命令名稱
進程信息區統計信息區域的下方顯示了各個進程的詳細信息。各列的含義如下:
列名 含義
PID 進程id
PPID 父進程id
RUSER Real user name
UID 進程所有者的用戶id
USER 進程所有者的用戶名
GROUP 進程所有者的組名
TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
PR 優先級
NI nice值。負值表示高優先級,正值表示低優先級
P 最後使用的CPU,僅在多CPU環境 下有意義
%CPU 上次更新到現在的CPU時間占用百分比 ,進程占用CPU的使用率
%MEM 進程使用的物理內存 百分比 , 進程使用的物理內存和總內存的百分比
TIME 進程使用的CPU時間總計,單位秒
TIME+ 進程使用的CPU時間總計,單位1/100秒 該進程啟動後占用的總的CPU時間,即占用CPU使用時間的累加值。
VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
CODE 可執行代碼占用的物理 內存大小,單位kb
DATA 可執行代碼以外的部分(數據 段+棧)占用的物理 內存大小,單位kb
SHR 進程使用的共享內存大小,單位kb
nFLT 頁面錯誤次數
nDRT 最後一次寫入到現在,被修改過的頁面數。
S 進程狀態。
D =不可中斷的睡眠狀態
R =運行
S =睡眠
T =跟蹤/停止
Z =僵屍進程
COMMAND 命令名/命令行
WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
Flags 任務標誌,參考 sched.h
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。
f 鍵可以選擇顯示的內容:按 f 鍵,可以進入編輯要顯示字段的視圖 ,顯示列的列表,按 a-z 即可顯示或隱藏對應的列,有 * 號的字段會顯示,無 * 號不顯示,最後按回車鍵確定。
按 o 鍵可以改變列的顯示順序。
按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按回車鍵確定。
按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。
大寫的 R 鍵可以將當前的排序倒轉。
按鍵b
打開或關閉 運行中進程的高亮效果
-
按鍵
x
打開或關閉 排序列的高亮效果 -
shift + >
或shift + <
可以向右或左改變排序列
top命令是一個功能十分強大的監控系統的工具,它的缺點是會消耗很多系統資源。
top命令可以監視指定用戶,缺省情況是監視所有用戶的進程。如果想查看指定用戶的情況,在終端中按“U”鍵,然後輸入用戶名,系統就會切換為指定用戶的進程運行界面。
pmap
可以根據進程號查看進程相關信息占用的內存情況
[[email protected] A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
- 0> pmap -d 17854
free命令用來顯示內存的使用情況
b.格式
free [-b -k -m] [-o] [-s delay] [-t] [-V]
c.主要參數
-b -k -m:分別以字節(KB、MB)為單位顯示內存使用情況。
-s delay:顯示每隔多少秒數來顯示一次內存使用情況。
-t:顯示內存總和列。
-o:不顯示緩沖區調節列。
使用這個命令後終端會連續不斷地報告內存使用情況(以字節為單位),每5秒更新一次
#free -b -s5
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
total:總計物理內存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內存總額。
Buffers/cached:磁盤緩存的大小。
第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別在於使用的角度來看,
mem是從OS的角度來看,對於OS,buffers/cached 都是屬於被使用,可用內存是178072KB,已用內存是7879480KB,其中包括,內核(OS)使用+Application(X, oracle,etc)使用+buffers+cached.
第三行所指的是從應用程序角度來看,對於應用程序來說,buffers/cached 是等於可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。如上例:2859864=178072+395020+2286772
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。 這兩個的區別在於使用的角度來看,
第一行是從OS的角度來看,因為對於OS,buffers/cached 都是屬於被使用,所以他的可用內存是16176KB,已用內存是3250004KB,其中包括,內核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是從應用程序角度來看,對於應用程序來說,buffers/cached 是等於可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。
如上例:2795064=16176+110652+2668236
接下來解釋什麽時候內存會被交換,以及按什麽方交換。 當可用內存少於額定值的時候,就會開會進行交換。
占用內存的測量
測量一個進程占用了多少內存,linux為我們提供了一個很方便的方法,/proc目錄為我們提供了所有的信息,實際上top等工具也通過這裏來獲取相應的信息。
/proc/meminfo 機器的內存使用信息
/proc/pid/maps pid為進程號,顯示當前進程所占用的虛擬地址。
/proc/pid/statm 進程所占用的內存
buffer cache,又稱bcache,其中文名稱為緩沖器高速緩沖存儲器,簡稱緩沖器高緩。另外,buffer cache按照其工作原理,又被稱為塊高緩。
在linux讀寫文件時,它用於緩存物理磁盤上的磁盤塊,從而加快對磁盤上數據的訪問。
buffer cache的內容對應磁盤上一個塊(block),塊通常為1K,都是連續的。
在linux下,為了更有效的使用物理內存,操作系統自動使用所有空閑內存作為Buffer Cache使用。當程序需要更多內存時,操作系統會自動減小Cache的大小
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.
更詳細的解釋參考:Difference Between Buffer and Cache
對於共享內存(Shared memory),主要用於在UNIX 環境下不同進程之間共享數據,是進程間通信的一種方法,一般的應用程序不會申請使用共享內存,筆者也沒有去驗證共享內存對上面等式的影響。如果你有興趣,請參考:What is Shared Memory?
cache 和 buffer的區別:
Cache:高速緩存,是位於CPU與主內存間的一種容量較小但速度很高的存儲器。由於CPU的速度遠高於主內存,CPU直接從內存中存取數據要等待一定時間周期,Cache中保存著CPU剛用過或循環使用的一部分數據,當CPU再次使用該部分數據時可從Cache中直接調用,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache集成在CPU內部,L2 Cache早期一般是焊在主板上,現在也都集成在CPU內部,常見的容量有256KB或512KB L2 Cache.
Buffer:緩沖區,一個用於存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。通過緩沖區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的設備的操作進程不發生間斷。
Free中的buffer和cache:(它們都是占用內存):
buffer :作為buffer cache的內存,是塊設備的讀寫緩沖區
cache:作為page cache的內存, 文件系統的cache
如果 cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那麽磁盤的讀IO 必會非常小。
Linux中top和free命令(6/15)