最近看到一大牛的分析報告,才知道筆者以前認識這4個命令是多么膚淺,其實要讀懂內存的信息,是要一些功力的。
1、top
VIRT 虛擬內存總量,VIRT=SWAP+RES
SWAP 使用的虛擬內存中被換出的大小
RES 進程使用的、未被換出的物理內存大小
SHR 共享內存大小,單位kb
S 進程狀態
%MEM 進程使用的物理內存百分比
%CPU CPU時間占用百分比
Mem: 191272k total 物理內存總量
173656k used 使用的物理內存總量
17616k free 空閑內存總量
22052k buffers 用作內核緩存的內存量
Swap: 192772k total 交換區總量
0k used 使用的交換區總量
192772k free 空閑交換區總量
123988k cached緩沖的交換區總量。內存中的內容被換出到交換區,而后又被換入到內存,但使用過的交換區尚未被覆蓋,該數值即為這些內容已存在于內存中的交換區的大小。相應的內存再次被換出時可不必再對交換區寫入。
2、free
主要關注值
Mem 物理內存統計
total 物理內存總量。
used 總計分配給緩存(包含buffers 與cache )使用的數量
free 未被分配的內存
shared 共享內存
buffers 系統分配但未被使用的buffers 數量,兩種主要Cache方式之一,針對磁盤塊的讀寫(塊設備緩存)
cached 系統分配但未被使用的cache 數量,兩種主要Cache方式之一,針對文件inode的讀寫(文件系統緩存)
-/+buffers/cached 物理內存的緩存統計
used (第一行Mem值)used - buffers -cached ,系統實際使用的內存總量
free (第一行Mem值)buffers + cached ,系統當前實際可用內存
Mem 從操作系統層面分析,buffers cached是已分配的(已使用)內存
-/+ buffers/cached 從應用程序層面分析,buffers cached是隨時都可以拿來用的,而且是優先使用的
Swap交換分區的使用情況
3、vmstat
r 表示運行隊列, 值超過了CPU數目,就會出現CPU瓶頸
b 表示阻塞的進程,觀察iowait值,通常是由于IO等待引起
swpd 虛擬內存已使用的大小,如果大于0,表示物理內存不足,注意程序內存泄露
free 空閑的物理內存的大小
buff
cache 直接記憶打開的文件,給文件做緩沖,Linux/Unix把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用
如果cache值較大,相應的bi會減少
si 每秒從磁盤讀入虛擬內存的大?。ㄋ追Q換進),值大于0,表示物理內存不夠或者內存泄露
so 每秒虛擬內存寫入磁盤的大?。ㄋ壮鰮Q出),值大于0,表示物理內存不夠或者內存泄露
如果swpd值不為0,但si so值長期為0,這種情況不會影響系統性能,但如果值長期大于0,CPU資源和IO資源都會受影響,系統性能下降
bi 從塊設備讀入的數據總量(讀磁盤)(KB/s)
bo 寫入到塊設備的數據總理(寫磁盤)(KB/s)
in 每秒CPU的中斷次數,包括時間中斷
cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的
us 用戶CPU時間
sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁
id 空閑 CPU時間
wt 等待IOCPU時間
4、iostat
iostat option <interval> <count>
-c 顯示CPU
-d 顯示Device,通常指磁盤
-p 顯示磁盤分區信息,不能與-x同時使用
-k 單位為KB
-m 單位為MB
-n 顯示NFS信息
-t 顯示時間,與AIX的時間顯示有差別
-x 顯示更詳細信息
常用命令1:iostat
常用命令2:iostat -x
rrqm/s 每秒進行 merge 的讀操作數目,即 delta(rmerge)/s
wrqm/s 每秒進行 merge 的寫操作數目,即 delta(wmerge)/s
r/s 每秒完成的讀 I/O 設備次數,即 delta(rio)/s
w/s 每秒完成的寫 I/O 設備次數。即delta(wio)/s
兩值相加=iops,磁盤性能三大分析因素之一,尤其是小文件的系統
rsec/s 每秒讀扇區數,即delta(rsect)/s
wsec/s: 每秒寫扇區數,即delta(wsect)/s
rkB/s 每秒讀K字節數,是 rsect/s 的一半,因為每扇區大小為512字節
wkB/s 每秒寫K字節數,是 wsect/s 的一半
avgrq-sz 平均每次設備I/O操作的數據大小(扇區),delta(rsect+wsect)/delta(rio+wio)
avgqu-sz 平均I/O隊列長度,即delta(aveq)/s/1000 (因為aveq的單位為毫秒)。
await 平均每次設備I/O操作的等待時間 (毫秒),即 delta(ruse+wuse)/delta(rio+wio)
svctm 平均每次設備I/O操作的服務時間 (毫秒),即 delta(use)/delta(rio+wio)
服務時間,俗稱響應時間,數據庫尤其注得此值
%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的
僅讀懂上述每個參數的意義是不夠的,我們應該分析參數之間的關聯關系,即一個參數的變化會引起另一個參數的上下波動
從而找出系統真正的瓶勁,好對癥下藥。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。