天天看點

Linux指令行性能檢測工具

上面引用了IBM紅皮書介紹的關于Linux性能需要考慮的内容。今天繼續截選和修改文檔中關于檢測部分的介紹,但這部分不是很詳細,今後有時間我會再補充一些參考資料。

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

一、uptime

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

   UP kernel下的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指令對分析程序的來源十分有用。

六、Numastat

   随着NUMA架構的不斷發展,例如eServer xSeries 445及其後續産品eServer xSeries 460,現在NUMA架構已經成為了企業級資料中心的主流。然而,NUMA架構在性能調優方面面臨了新的挑戰,例如記憶體配置設定的問題在NUMA系統之前并沒人感興趣,而Numastat指令提供了一個監測NUMA架構的工具。Numastat指令提供了本地記憶體與遠端記憶體使用情況的對比和各個節點的記憶體使用情況。Numa_miss列顯示配置設定失敗的本地記憶體,numa_foreign列顯示配置設定遠端記憶體(通路速度慢)資訊,過多的調用遠端記憶體将增加系統的延遲進而影響整個系統的性能。使運作在一個節點上的程序都通路本地記憶體将極大的改善系統的性能。

※我使用的系統不支援NUMA架構,此圖為原文檔截圖。

七、sar

   sar程式也是sysstat安裝包的一部分。sar指令用于收集、報告和儲存系統的資訊。Sar指令由三個應用組成:sar,用與顯示資料;sa1和sa2,用于收集和存儲資料。預設情況下,系統會在crontab中加入自動收集和分析的操作:

[root@rfgz ~]# cat /etc/cron.d/sysstat

# run system activity accounting tool every 10 minutes

*/10 * * * * root /usr/lib/sa/sa1 1 1

# generate a daily summary of process accounting at 23:53

53 23 * * * root /usr/lib/sa/sa2 -A

   sar指令所生成的資料儲存在/var/log/sa/目錄下,資料按照時間儲存,可以根據時間來查詢相應的性能資料。

   你也可以使用sar在指令行下得到一個實時的執行結果,收集的資料可以包括CPU使用率、記憶體頁面、網絡I/O等等。下面的指令表示用sar執行5次,間隔時間為3秒:

八、free

   free指令顯示系統的所有記憶體的使用情況,包括空閑記憶體、被使用的記憶體和交換記憶體空間。Free指令顯示也包括一些核心使用的緩存和緩沖區的資訊。

   當使用free指令的時候,需要記住linux的記憶體結構和虛拟記憶體的管理方法,比如空閑記憶體數量的限制,還有swap空間的使用并不标志一個記憶體瓶頸的出現。

Free指令有用的參數:

·-b,-k,-m和-g分别按照bytes, kilobytes, megabytes, gigabytes顯示結果。

·-l差別顯示low和high記憶體

·-c {count}顯示free輸出的次數

九、Pmap

pmap指令顯示一個或者多個程序使用記憶體的數量,你可以用這個工具來确定伺服器上哪個程序占用了過多的記憶體進而導緻記憶體瓶頸。

十、Strace

   strace截取和記錄程序的系統調用資訊,還包括程序接受的指令信号。這是一個有用的診斷和調試工具,系統管理者可以通過strace來解決程式上的問題。

   指令格式,需要指定需要監測的程序ID。這個多為開發人員使用。

strace -p <pid>

十一、ulimit

   可以通過ulimit來控制系統資源的使用。請看以前的日志:使用ulimit和proc去調整系統參數

十二、Mpstat

   mpstat指令也是sysstat包的一部分。Mpstat指令用于監測一個多CPU系統中每個可用CPU的情況。Mpstat指令可以顯示每個CPU或者所有CPU的運作情況,同時也可以像vmstat指令那樣使用參數進行一定頻率的采樣結果的監測。

繼續閱讀