Linux系統裡的程式管理(轉)

ba發表於2007-08-16
Linux系統裡的程式管理(轉)[@more@]在Linux系統裡,當前正在執行的程式例項稱為程式。比如,當你啟動Apache的時候,系統會為它分配一個程式ID。然後就可以用這個ID監視和控制這個程式。  

  程式監視和控制是任何Linux系統管理員的核心任務。一個管理員可以終止("kill")、重啟一個程式,甚至可以為它指定一個不同的優先順序。標準的Linux命令"ps"和"top"通常用於檢視當前的程式列表。下面我來說明如何用這些命令和其它命令來管理Linux系統中的程式。  

  用ps監視程式

  一個監視Linux的標準工具就是"ps",它是程式狀態的簡稱。這個命令返回正在執行的程式的資訊。這些資訊可能包括程式是在哪個使用者名稱下執行的,使用了多少CPU以及執行了多長時間。如果你要手工終止程式或者確定是哪個程式讓系統變慢時,這些資訊是很有用的。  

  如果你只是鍵入了"ps"這個命令,那麼只能列出執行在當前終端下的程式。下面的例子是透過遠端shell執行"ps"輸出的結果:

  $ ps

  PID TTY TIME CMD

  4684 pts/14 00:00:00 bash

  27107 pts/14 00:00:00 ps  

  從輸出可以看出,分配給這個使用者/終端的程式只有Bash shell和ps命令本身。你還可以看到為每個程式列出的PID(程式ID)和TTY、TIME和CMD。TTY指明這個程式正在執行在哪個終端上,TIME指明瞭這個程式已經使用了多少CPU時間,CMD則是啟動這個程式的命令名稱。  

  使用者可以看到,標準的ps命令只能列出基本的資訊。要想獲得Linux系統上執行的程式的詳細資訊,你必須加入一些命令列引數。  

  加入ps常用的aux引數後可以顯示其他使用者啟動的程式(a)、檢視系統中屬於自己的程式(x)以及啟動這個程式的使用者和它啟動的時間(u)。  

  現在還有其它更多的資訊,增加了USER、 %CPU、%MEM、 VSZ、RSS、STAT和START這幾個域。現在我們來看一下這些資訊是什麼含義。  

   首先,使用者可以看到所有的程式,而不僅僅是執行在終端上的那些。USER域指明瞭是哪個使用者啟動了這個命令。很多程式和系統一起啟動,而且會把根或者一些系統帳號列為USER。當然,其它一些程式是單獨執行的。這個資訊本身就可以幫助你縮小問題範圍。假如某個使用者啟動了指令碼,佔用了伺服器大量的I/O。如果能馬上找到是誰在執行這個程式,那麼就可以大大加快解決問題的速度。  

  %CPU、 %MEM、VSZ和RSS這幾個域都與系統資源有關。首先,使用者可以檢視某個程式佔用了多少CPU。這個資訊是實時顯示的,所以很難用ps捕捉峰值。可能使用者會發現,為了找到引發問題的那個程式需要不停地執行ps命令。  

  除了CPU使用情況,還可以看到記憶體使用及其VSZ(虛擬記憶體大小)和RSS(常駐集大小)。VSZ表示如果一個程式完全駐留在記憶體的話需要佔用多少記憶體空間,而RSS指明瞭當前實際佔用了多少記憶體。如果能夠了解一個程式當前佔用了多少記憶體,那麼就可以確定這個程式是在正常執行還是出現了異常。程式通常都會消耗比正常情況更多的記憶體和CPU。雖然程式設計師都在盡力確保程式碼正確地使用資源,但是有時候還是要由管理員來決定終止還是重啟程式。  

  使用者可能會注意到在ps aux命令的輸出結果裡,大部分TTY域有個"?"。這是因為這些程式或者在系統啟動的時候就開始執行了,或者是由初始化指令碼(init script)啟動的。這些程式沒有控制終端,所以作了標記。另外,linux-sanity-check命令有一個TTY的值為pts/14。這個命令是遠端連線執行的,有與其關聯的一個終端。當你的機器開放了多條連線,而你又想確定某個命令執行在哪個視窗的時候,這個資訊是很有用的。  

  STAT顯示了程式當前的狀態。在我們的例子裡,很多程式處在睡眠狀態,STAT域裡的"S"指明瞭這一狀態。這僅僅表明這些程式在等待某些事件發生--可能是使用者輸入或者系統資源的可用性。linux-sanity-check命令則有一個R狀態,這個狀態表明程式當前正在執行。有時候你可以瀏覽一下這個列表然後找那些R狀態的程式。如果大部分程式處在睡眠狀態而又有問題發生,那麼只關注那些正在執行的程式是最好的方法。那種狀態不一定能說明發生了問題,但是有時候如果程式執行的時間過長可能意味著發生了某些深層次的問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961127/,如需轉載,請註明出處,否則將追究法律責任。

相關文章