天天看點

Linux指令行性能檢測工具(一)

 下面附圖的指令輸出資訊,以紅旗DC Server 5.0 for x86 Sp1為基礎平台,可能在不同的作業系統或核心版本有較大差別,對比時請留意。

一、uptime

     Uptime指令的顯示結果包括伺服器已經運作了多長時間,有多少登陸使用者和對伺服器性能的總體評估(load average)。load average值分别記錄了上個1分鐘,5分鐘和15分鐘間隔的負載情況,load average不是一個百分比,而是在隊列中等待執行的程序的數量。如果程序要求CPU時間被阻塞(意味着CPU沒有時間處理它),load average值将增加。另一方面,如果每個程序都可以立刻得到通路CPU的時間,這個值将減少。

   UPtime下的load average的最佳值是1,這說明每個程序都可以立刻被CPU處理,當然,更低不會有問題,隻說明浪費了一部分的資源。但在不同的系統間這個值也是不同的,例如一個單CPU的工作站,load average為1或者2都是可以接受的,而在一個多CPU的系統中這個值應除以實體CPU的個數,假設CPU個數為4,而load average為8或者10,那結果也是在2多點而已。

   你可以使用uptime判斷一個性能問題是出現在伺服器上還是網絡上。例如,如果一個網絡應用運作性能不理想,運作uptime檢查系統負載是否比較高,如果不是這個問題更可能出現在你的網絡上。

二、top

   Top指令顯示了實際CPU使用情況,預設情況下,它顯示了伺服器上占用CPU的任務資訊并且每5秒鐘重新整理一次。你可以通過多種方式分類它們,包括PID、時間和記憶體使用情況。

下面是輸出值的介紹:

引用

PID:程序辨別

USER;程序所有者的使用者名

PRI:程序的優先級

NI:nice級别

SIZE:程序占用的記憶體數量(代碼+資料+堆棧)

RSS;程序使用的實體記憶體數量

SHARE;該程序和其他程序共享記憶體的數量

STAT:程序的狀态:S=休眠狀态,R=運作狀态,T=停止狀态,D=中斷休眠狀态,Z=僵屍狀态

%CPU:共享的CPU使用

%MEM;共享的實體記憶體

TIME:程序占用CPU的時間

COMMAND:啟動任務的指令行(包括參數)

程序的優先級和nice級别

   程序優先級是一個決定程序被CPU執行優先順序的參數,核心會根據需要調整這個值。Nice值是一個對優先權的限制。程序優先級的值不能低于nice值。(nice值越低優先級越高)

   程序優先級是無法去手動改變的,隻有通過改變nice值去間接的調整程序優先級。如果一個程序運作的太慢了,你可以通過指定一個較低的nice值去為它配置設定更多的CPU資源。當然,這意味着其他的一些程序将被配置設定更少的CPU資源,運作更慢一些。Linux支援nice值的範圍是19(低優先級)到-20(高優先級),預設的值是0。如果需要改變一個程序的nice值為負數(高優先級),必須使用su指令登陸到root使用者。下面是一些調整nice值的指令示例,

以nice值-5開始程式xyz

#nice –n -5 xyz

改變已經運作的程式的nice值

#renice level pid

将pid為2500的程序的nice值改為10

#renice 10 2500

僵屍程序

   當一個程序被結束,在它結束之前通常需要用一些時間去完成所有的任務(比如關閉打開的檔案),在一個很短的時間裡,這個程序的狀态為僵屍狀态。在程序完成所有關閉任務之後,會向父程序送出它關閉的資訊。有些情況下,一個僵屍程序不能關閉它自己,這時這個程序狀态就為z(zombie)。不能使用kill指令殺死僵屍程序,因為它已經标志為“dead”。如果你無法擺脫一個僵屍程序,你可以殺死它的父程序,這個僵屍程序也就消失了。然而,如果父程序是init程序,你不能殺死init程序,因為init是一個重要的系統程序,這種情況下你隻能通過一次重新啟動伺服器來擺脫僵屍程序。也必須分析應用為什麼會導緻僵死?

三、iostat

   iostat是sysstat包的一部分。Iostat顯示自系統啟動後的平均CPU時間(與uptime類似),它也可以顯示磁盤子系統的使用情況,iostat可以用來監測CPU使用率和磁盤使用率。

   CPU使用率分四個部分:

%user:user level(應用)的CPU占用率情況

%nice:加入nice優先級的user level的CPU占用率情況

%sys:system level(核心)的CPU占用情況

%idle:空閑的CPU資源情況

   磁盤占用率有下面幾個部分:

Device:塊裝置名

Tps:裝置每秒進行傳輸的數量(每秒的I/O請求)。多個單獨的I/O請求可以被組成一個傳輸操作,因為一個傳輸操作可以是不同的容量。

Blk_read/s, Blk_wrtn/s:該裝置每秒讀寫的塊的數量。塊可能為不同的容量。

Blk_read, Blk_wrtn:自系統啟動以來讀寫的塊裝置的總量。

塊的大小

   塊可能為不同的容量。塊的大小一般為1024、2048、4048byte。可通過tune2fs或dumpe2fs獲得:

[root@rfgz ~]# tune2fs -l /dev/hda1|grep 'Block size'

Block size:               4096

[root@rfgz ~]# dumpe2fs -h /dev/hda1|grep 'Block size'

dumpe2fs 1.35 (28-Feb-2004)

四、Vmstat

   Vmstat指令提供了對程序、記憶體、頁面I/O塊和CPU等資訊的監控,vmstat可以顯示檢測結果的平均值或者取樣值,取樣模式可以提供一個取樣時間段内不同頻率的監測結果。

注:在取樣模式中需要考慮在資料收集中可能出現的誤差,将取樣頻率設為比較低的值可以盡可能的減小誤差的影響。

下面介紹一下各列的含義

·process(procs)

r:等待運作時間的程序數量

b:處在不可中斷睡眠狀态的程序

w:被交換出去但是仍然可以運作的程序,這個值是計算出來的

·memoryswpd:虛拟記憶體的數量

free:空閑記憶體的數量

buff:用做緩沖區的記憶體數量

·swap

si:從硬碟交換來的數量

so:交換到硬碟去的數量

·IO

bi:向一個塊裝置輸出的塊數量

bo:從一個塊裝置接受的塊數量

·system

in:每秒發生的中斷數量, 包括時鐘

cs:每秒發生的context switches的數量

·cpu(整個cpu運作時間的百分比)

us:非核心代碼運作的時間(使用者時間,包括nice時間)

sy:核心代碼運作的時間(系統時間)

id:空閑時間,在Linux 2.5.41之前的核心版本中,這個值包括I/O等待時間;

wa:等待I/O操作的時間,在Linux 2.5.41之前的核心版本中這個值為0

   Vmstat指令提供了大量的附加參數,下面列舉幾個十分有用的參數:

·m:顯示核心的記憶體使用率

·a:顯示記憶體頁面資訊,包括活躍和不活躍的記憶體頁面

·n:顯示報頭行,這個參數在使用取樣模式并将指令結果輸出到一個檔案時非常有用。例如root#vmstat –n 2 10以2秒的頻率顯示10輸出結果

·當使用-p {分區}時,vmstat提供對I/O結果的統計

五、ps和pstree

   ps和pstree指令是系統分析最常用的基本指令,ps指令提供了一個正在運作的程序的清單,列出程序的數量取決于指令所附加的參數。例如ps –A 指令列出所有程序和它們相應的程序ID(PID),程序的PID是使用其他一些工具之前所必須了解的,例如pmap或者renice。

   在運作java應用的系統上,ps –A 指令的輸出很容易就會超過螢幕的顯示範圍,這樣就很難得到所有程序的完整資訊。這時,使用pstree指令可以以樹狀結構來顯示所有的程序資訊并且可以整合子程序的資訊。Pstree指令對分析程序的來源十分有用。

<b></b>

繼續閱讀