一、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
十一、ulimit
可以透過ulimit來控制系統資源的使用。請看以前的日誌:
十二、Mpstat
mpstat命令也是sysstat包的一部分。Mpstat命令用於監測一個多CPU系統中每個可用CPU的情況。Mpstat命令可以顯示每個CPU或者所有CPU的執行情況,同時也可以像vmstat命令那樣使用引數進行一定頻率的取樣結果的監測。
十三、附錄
本文擷取和修改自IBM的紅皮書Tuning Red Hat Enterprise Linux on IBM eServer xSeries Servers。