Linux操作系統是一個開源產品,也是一個開源軟件的實踐和應用平台,在這個平台下有無數的開源軟件支撐,我們常見的apache、 tomcat、mysql、php等等,開源軟件的最大理念是自由、開放,那麼linux作為一個開源平台,最終要實現的是通過這些開源軟件的支持,以最 低廉的成本,達到應用最優的性能。因此,談到性能問題,主要實現的是linux操作系統和應用程序的最佳結合。
系統的性能是指操作系統完成任務的有效性、穩定性和響應速度。Linux系統管理員可能經常會遇到系統不穩定、響應速度慢等問題,例如在linux 上搭建了一個web服務,經常出現網頁無法打開、打開速度慢等現象,而遇到這些問題,就有人會抱怨linux系統不好,其實這些都是表面現象。操作系統完 成一個任務時,與系統自身設置、網絡拓樸結構、路由設備、路由策略、接入設備、物理線路等多個方面都密切相關,任何一個環節出現問題,都會影響整個系統的 性能。因此當linux應用出現問題時,應當從應用程序、操作系統、服務器硬件、網絡環境等方面綜合排查,定位問題出現在哪個部分,然後集中解決。
在應用程序、操作系統、服務器硬件、網絡環境等方面,影響性能最大的是應用程序和操作系統兩個方面,因為這兩個方面出現的問題不易察覺,隱蔽性很強。而硬 件、網絡方面只要出現問題,一般都能馬上定位。本章主要講解操作系統方面的性能調優思路,應用程序方面需要具體問題具體對待。
解決系統性能問題的一般思路
下面從影響操作系統性能的因素、性能優化工具、系統性能評價標准三個方面介紹優化Linux的一般思路和方法。
影響Linux性能的因素
1.CPU
CPU是操作系統穩定運行的根本,CPU的速度與性能很大一部分決定了系統整體的性能,因此,cpu數量越多、主頻越高,服務器性能也就相對越好。但事實也並非完全如此。
目前大部分CPU在同一時間內只能運行一個線程,超線程的處理器可以在同一時間運行多個線程,因而,可以利用處理器的超線程特性提高系統性能,在 linux系統下,只有運行SMP內核才能支持超線程,但是,安裝的CPU數量越多,從超線程獲得的性能上的提高就越少。另外,Linux內核會把多核的 處理器當作多個單獨的CPU來識別,例如兩顆4核的CPU,在linux系統下會認到8顆CPU。但是從性能角度來講,兩顆4核的CPU和8顆單核的 CPU並不完全等價,根據權威部門得出的測試結論,前者的整體性能要低於後者25%-30%。
可能出現CPU瓶頸的應用有郵件服務器、動態web服務器等,對於這類應用要把CPU的配置和性能放在主要位置。
2.內存
內存的大小也是影響linux性能的一個重要的因素,內存太小,系統進程將被阻塞,應用也將變得緩慢,甚至失去響應,內存太大,導致資源浪費。Linux 系統采用了物理內存和虛擬內存的概念,虛擬內存雖然可以緩解物理內存的不足,但是占用過多的虛擬內存,應用程序的性能將明顯下降,要保證應用程序的高性能 運行,物理內存一定要足夠大,但是過大的物理內存,會造成內存資源浪費,例如在一個32位處理器的Linux操作系統上,超過8G的物理內存都將被浪費。 因此,要使用更大的內存,建議安裝64位的操作系統,同時開啟linux的大內存內核支持。
由於處理器尋址范圍的限制,在32位linux操作系統上,應用程序單個進程最大只能使用2G的內存,這樣以來,即使系統有更大的內存,應用程序也無法 “享”用,解決的辦法就是使用64為處理器,安裝64位操作系統,在64位操作系統下,可以滿足所有應用程序對內存的使用需求[g1] ,幾乎沒有限制。
可能出現內存性能瓶頸的應用有打印服務器、數據庫服務器、靜態web服務器等,對於這類應用要把內存大小放在主要位置。
3.磁盤I/O寬帶
磁盤的I/O性能直接影響應用程序的性能,在一個有頻繁讀寫的應用中,如果磁盤I/O性能得不到滿足,就會導致應用的停滯。好在現今的磁盤都采用了很多方法來提高I/O性能,比如常見的磁盤RAID技術。
RAID的英文全稱為:Redundant Array of Independent Disks。翻譯成中文即為獨立磁盤冗余陣列,簡稱磁盤陣列。RAID通過把多塊獨立的磁盤(物理硬盤)按不同方式組合起來形成一個磁盤組(邏輯硬盤), 從而提供比單個硬盤更高的I/O性能和數據冗余。
通過RAID技術組成的磁盤組,就相當於一個大硬盤,用戶可以對它進行分區格式化、建立文件系統等操作,跟單個物理硬盤一模一樣,唯一不同的是RAID磁盤組的I/O性能比單個硬盤要高很多,同時對數據的安全性也有很大提升。
根據磁盤組合方式的不同,RAID可以分為RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、 RAID0+1、RAID10等級別,常用的RAID級別有RAID0、RAID1、RAID5、RAID0+1,這裡簡單介紹如下:
l RAID 0:通過把多塊硬盤粘合成一個容量更大的硬盤組,提高了磁盤的性能和吞吐量。這種方式成本低,要求至少兩個磁盤,但是沒有容錯和數據修復功能,因而只能用在對數據安全性要求不高的環境中。
l RAID 1:也就是磁盤鏡像,通過把一個磁盤的數據鏡像到另一個磁盤上,最大限度的保證磁盤數據的可靠性和可修復性,具有很高的數據冗余能力,但磁盤利用率只有50%,因而,成本最高,多用在保存重要數據的場合。
l RAID5:采用了磁盤分段加奇偶校驗技術,從而提高了系統可靠性,RAID5讀出效率很高,寫入效率一般,至少需要3塊盤。允許一塊磁盤故障,而不影響數據的可用性。
l RAID0+1:把RAID0和RAID1技術結合起來就成了RAID0+1,至少需要4個硬盤。此種方式的數據除分布在多個盤上外,每個盤都有其鏡像盤,提供全冗余能力,同時允許一個磁盤故障,而不影響數據可用性,並具有快速讀/寫能力。
通過對各個RAID級別的介紹,我們就可以根據應用的不同特性,選擇適合自身的RAID級別,從而保證應用程序在磁盤方面達到最優的性能。
4.網絡I/O寬帶
Linux下的各種應用,一般都是基於網絡的,因此網絡帶寬也是影響性能的一個重要因素,低速的、不穩定的網絡將導致網絡應用程序的訪問阻塞,而穩定、高 速的帶寬,可以保證應用程序在網絡上暢通無阻的運行。幸運的是,現在的網絡一般都是千兆帶寬,或者光纖網絡,帶寬問題對應用程序性能造成的影響也在逐步降 低。
5.總結
通過對以上四個方面的講述,不難看出,每個方面之間都是相互依賴的,不能孤立的從某個方面來排查問題,當一個方面出現性能問題時,往往會引發其它方面出現 問題。例如大量的磁盤讀寫勢必消耗CPU和I/O資源,而內存的不足會導致頻繁的進行內存頁寫入磁盤、磁盤寫到內存的操作,造成磁盤I/O瓶頸,同時,大 量的網絡流量也會造成CPU過載。所以,在處理性能問題時,要縱觀全局,從各個方面進行綜合考慮。