上面引用了IBM紅皮書介紹的關於Linux性能須要考慮的內容。今天繼續截選和修改文檔中關於檢測部分的介紹,但這部分不是很詳細,從此有時間我會再補充一些參考資料。
※注:下面附圖的命令輸出信息,以紅旗DC Server 5.0 for x86 Sp1爲基礎平臺,可能在不一樣的操做系統或核心版本有較大區別,對比時請留意。
1、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檢查系統負載是否比較高,若是不是這個問題更可能出如今你的網絡上。
2、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是一個重要的系統進程,這種狀況下你只能經過一次從新啓動服務器來擺脫殭屍進程。也必須分析應用爲何會致使僵死?
3、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:自系統啓動以來讀寫的塊設備的總量。
塊的大小
塊可能爲不一樣的容量。塊的大小通常爲102四、204八、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
4、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結果的統計
5、ps和pstree
ps和pstree命令是系統分析最經常使用的基本命令,ps命令提供了一個正在運行的進程的列表,列出進程的數量取決於命令所附加的參數。例如ps –A 命令列出全部進程和它們相應的進程ID(PID),進程的PID是使用其餘一些工具以前所必須瞭解的,例如pmap或者renice。
在運行java應用的系統上,ps –A 命令的輸出很容易就會超過屏幕的顯示範圍,這樣就很可貴到全部進程的完整信息。這時,使用pstree命令能夠以樹狀結構來顯示全部的進程信息而且能夠整合子進程的信息。Pstree命令對分析進程的來源十分有用。
6、Numastat
隨着NUMA架構的不斷髮展,例如eServer xSeries 445及其後續產品eServer xSeries 460,如今NUMA架構已經成爲了企業級數據中心的主流。然而,NUMA架構在性能調優方面面臨了新的挑戰,例如內存分配的問題在NUMA系統以前並沒人感興趣,而Numastat命令提供了一個監測NUMA架構的工具。Numastat命令提供了本地內存與遠程內存使用狀況的對比和各個節點的內存使用狀況。Numa_miss列顯示分配失敗的本地內存,numa_foreign列顯示分配遠程內存(訪問速度慢)信息,過多的調用遠程內存將增長系統的延遲從而影響整個系統的性能。使運行在一個節點上的進程都訪問本地內存將極大的改善系統的性能。
※我使用的系統不支持NUMA架構,此圖爲原文檔截圖。
7、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秒:
8、free
free命令顯示系統的全部內存的使用狀況,包括空閒內存、被使用的內存和交換內存空間。Free命令顯示也包括一些內核使用的緩存和緩衝區的信息。
當使用free命令的時候,須要記住linux的內存結構和虛擬內存的管理方法,好比空閒內存數量的限制,還有swap空間的使用並不標誌一個內存瓶頸的出現。
Free命令有用的參數:
引用
·-b,-k,-m和-g分別按照bytes, kilobytes, megabytes, gigabytes顯示結果。
·-l區別顯示low和high內存
·-c {count}顯示free輸出的次數
9、Pmap
pmap命令顯示一個或者多個進程使用內存的數量,你能夠用這個工具來肯定服務器上哪一個進程佔用了過多的內存從而致使內存瓶頸。
10、Strace
strace截取和記錄進程的系統調用信息,還包括進程接受的命令信號。這是一個有用的診斷和調試工具,系統管理員能夠經過strace來解決程序上的問題。
命令格式,須要指定須要監測的進程ID。這個多爲開發人員使用。
strace -p <pid>
11、ulimit
能夠經過ulimit來控制系統資源的使用。請看之前的日誌:使用ulimit和proc去調整系統參數
12、Mpstat
mpstat命令也是sysstat包的一部分。Mpstat命令用於監測一個多CPU系統中每一個可用CPU的狀況。Mpstat命令能夠顯示每一個CPU或者全部CPU的運行狀況,同時也能夠像vmstat命令那樣使用參數進行必定頻率的採樣結果的監測。
java