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)
Block size:               4096


四、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命令那樣使用參數進行一定頻率的採樣結果的監測。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章