一 uptime
uptime命令用於查看伺服器運行了多長時間以及有多少個使用者登入,快速獲知伺服器的負荷情況。
uptime的輸出包含一項內容是load average,顯示了最近1,5,15分鐘的負荷情況。它的值代表等待CPU處理的進程數,如果CPU沒有時間處理這些進程,load average值會升高;反之則會降低。
load average的最佳值是1,說明每個進程都可以馬上處理並且沒有CPU cycles被丟失。對於單CPU的機器,1或者2是可以接受的值;而在一個多CPU的系統中這個值應除以物理CPU的個數,假設CPU個數為4,而load average為8或者10,那結果也是在2多點而已。
也可以使用uptime命令來判斷網路效能。例如,某個網路應用效能很低,通過運行uptime查看伺服器的負荷是否很高,如果不是,那麼問題應該是網路方面造成的。
也可以查看/proc/loadavg 和/proc/uptime兩個檔案來擷取相關的資訊。
以下是uptime的運行執行個體:
二 Top
Top命令顯示了實際CPU使用方式,預設情況下,它顯示了伺服器上佔用CPU的任務資訊並且每5秒鐘重新整理一次。你可以通過多種方式分類它們,包括PID、時間和記憶體使用量情況。
下面是輸出值的介紹:
PID:進程標識
USER;進程所有者的使用者名稱
PR:進程的優先順序
NI:nice層級
RES:進程使用的實體記憶體數量
SHR:該進程和其他進程共用記憶體的數量
CODE:代碼的大小
DATA:資料+堆棧大小
S:進程的狀態: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是一個重要的系統進程,這種情況下你只能通過一次重新啟動伺服器來擺脫殭屍進程。也必須分析應用為什麼會導致僵死?
Top運行樣本:
三 Free
free命令顯示系統的所有記憶體的使用方式,包括空閑記憶體、被使用的記憶體和交換記憶體空間。Free命令顯示也包括一些核心使用的緩衝和緩衝區的資訊。 當使用free命令的時候,需要記住Linux的記憶體結構和虛擬記憶體的管理方法,比如空閑記憶體數量的限制,還有swap空間的使用並不標誌一個記憶體瓶頸的出現。
也可以通過 cat /proc/meminfo來查看記憶體的使用方式。
Free運行樣本:
[root@Linux /tmp]# free
total used free shared buffers cached
Mem: 4149156 4130412 18744 0 13220 2720160
-/+ buffers/cache: 1397032 2752124
Swap: 6289408 144 6289264第1行
total 記憶體總數: 4149156
used 已經使用的記憶體數: 4130412
free 閒置記憶體數: 18744
shared 當前已經廢棄不用,總是0
buffers Buffer Cache記憶體數: 13220
cached Page Cache記憶體數: 2720160
關係:total = used + free
第2行:
-/+ buffers/cache的意思相當於:
-buffers/cache 的記憶體數:1397032 (等於第1行的 used - buffers - cached)
+buffers/cache 的記憶體數: 2752124 (等於第1行的 free + buffers + cached)
可見-buffers/cache反映的是被程式實實在在吃掉的記憶體,而+buffers/cache反映的是可以挪用的記憶體總數。
第三行單獨針對交換分區, 就不用再說了.
為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行緩衝(用於VFS,加速檔案路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
四 PS 和 Pstree
ps和pstree命令是系統分析最常用的基本命令。
ps命令提供了一個正在啟動並執行進程的列表,列出進程的數量取決於命令所附加的參數。通常地我們可以使用如下命令來尋找某進程是否在運行: ps -aux | grep XXX 。
pstree命令可以以樹狀結構來顯示所有的進程資訊並且可以整合子進程的資訊。Pstree命令對分析進程的來源十分有用。
樣本:
五VMStat
Vmstat命令提供了對進程、記憶體、頁面I/O塊和CPU等資訊的監控,vmstat可以顯示檢測結果的平均值或者取樣值,取樣模式可以提供一個取樣時間段內不同頻率的監測結果。
註:在取樣模式中需要考慮在資料收集中可能出現的誤差,將取樣頻率設為比較低的值可以儘可能的減小誤差的影響。
下面介紹一下各列的含義
·process(procs)
r:等待已耗用時間的進程數量
b:處在不可中斷睡眠狀態的進程
w:被交換出去但是仍然可以啟動並執行進程,這個值是計算出來的
·memory
swpd:虛擬記憶體的數量
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
樣本:
六 SysStat
http://sebastien.godard.pagesperso-orange.fr/index.html
iostat: 報告CPU的統計和裝置,分區,網路檔案系統的IO的統計;
mpstat: 報告進程相關的統計;
pidstat:報告Linux的IO,CPU,memory等的統計;
sar: 收集,報告,儲存系統活動資訊(CPU, memory, disks, interrupts, network interfaces, TTY, kernel tables,etc.);
完!