vmstat命令的含義為顯示虛擬記憶體狀態(「viryual memor statics」),但是它可以報告關於程序、記憶體、i/o等系統整體執行狀態。
語法vmstat(選項)(引數)選項
-a:顯示活動內頁;
-f:顯示啟動後建立的程序總數;
-m:顯示slab資訊;
-n:頭資訊僅顯示一次;
-s:以**方式顯示事件計數器和記憶體狀態;
-d:報告磁碟狀態;
-p:顯示指定的硬碟分割槽狀態;
-s:輸出資訊的單位。
引數
事件間隔:狀態資訊重新整理的時間間隔;
次數:顯示報告的次數。
例項vmstat 1 代表每1秒鐘輸出vmstat 的資訊
swap si so 有持續不為零 在swap 這存在瓶頸
swap si so 有持續不為零 在swap 這存在瓶頸
字段說明:
procs(程序)
r: 執行佇列中程序數量,這個值也可以判斷是否需要增加cpu。(長期大於1),當這個值超過了cpu數目,就會出現cpu瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果執行佇列過大,表示你的cpu很繁忙,一般會造成cpu使用率很高。
b: 等待io的程序數量。
memory(記憶體)
swpd: 使用虛擬記憶體大小,如果swpd的值不為0,但是si,so的值長期為0,這種情況不會影響系統效能。如果大於0,表示你的機器物理記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該公升級記憶體了或者把耗記憶體的任務遷移到其他機器。
free: 空閒物理記憶體大小。
buff: 用作緩衝的記憶體大小。
cache: 用作快取的記憶體大小,如果cache的值大的時候,說明cache處的檔案數多,如果頻繁訪問到的檔案都能被cache處,那麼磁碟的讀io bi會非常小。
swap
si: 每秒從交換區寫到記憶體的大小,由磁碟調入記憶體。
so: 每秒寫入交換區的記憶體大小,由記憶體調入磁碟。
注意:記憶體夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統效能會受到影響,磁碟io和cpu資源都會被消耗。
有些朋友看到空閒記憶體(free)很少的或接近於0時,就認為記憶體不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統效能這時不會受到影響的。
io(現在的linux版本塊的大小為1kb)
bi: 每秒讀取的塊數
bo: 每秒寫入的塊數
注意:隨機磁碟讀寫的時候,這2個值越大(如超出1024k),能看到cpu在io等待的值也會越大。
system(系統)
in: 每秒中斷數,包括時鐘中斷。
cs: 每秒上下文切換數。 每秒上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程序上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者程序的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程序可以由程序或者執行緒的峰值一直下調,壓測,直到cs到乙個比較小的值,這個程序和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的**就會進入核心空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁呼叫系統函式。上下文切換次數過多表示你的cpu大部分浪費在上下文切換,導致cpu幹正經事的時間少了,cpu沒有充分利用,是不可取的。
注意:上面2個值越大,會看到由核心消耗的cpu時間會越大。
cpu(以百分比表示)
us: 使用者程序執行時間百分比(user time) us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程式演算法或者進行加速。
sy: 核心系統程序執行時間百分比(system time) sy的值高時,說明系統核心消耗的cpu資源多,這並不是良性表現,我們應該檢查原因。 如果太高,表示系統呼叫時間長,例如是io操作頻繁。
wa: io等待時間百分比 wa的值高時,說明io等待比較嚴重,這可能由於磁碟大量作隨機訪問造成,也有可能磁碟出現瓶頸(塊操作)。
id: 空閒時間百分比
lsof命令效能監測與優化
lsof 查詢進行檔案控制代碼數,結合使用的命令為 ulimit a grep open files lsof命令用於檢視你程序開打的檔案,開啟檔案的程序,程序開啟的埠 tcp udp 找回 恢復刪除的檔案。是十分方便的系統監視工具,因為lsof命令需要訪問核心記憶體和各種檔案,所以需要root使用...
效能分析命令 vmstat
usage vmstat options delay count delay代表每過多少秒顯示一條,count代表要顯示的總條數 options a,active active inactive memory f,forks number of forks since boot m,slabs sl...
效能監測和優化概述
監測資料庫是為了了解伺服器的執行狀況。有效的監測意味著獲取效能的週期性快照,以分析出導致問題的流程,同時 便於掌握一段時間內的效能變化趨勢。監測資料庫對資料庫開發者和管理者的意義 確定是否能提高效能。例如,通過監測頻繁使用的查詢的響應時間來調整sql語句,表索引和表結構。評估使用者活動。例如,通過監...