基於Linux服務器的性能分析與優化(1)

做爲一名Linux系統管理員,最主要的工做是優化系統配置,使應用在系統上以最優的狀態運行,但硬件問題、軟件問題、網絡環境等的複雜性和多變性,致使了對系統的優化變得異常複雜,如何定位性能問題出在哪一個方面,是性能優化的一大難題。 本文從系統入手,重點講述因爲系統軟、硬件配置不當形成的性能問題,而且給出了檢測系統故障和優化性能的通常方法和流程。

1、 系統性能分析的目的

1.1 找到系統性能的瓶頸
系統的性能是指操做系統完成任務的有效性、穩定性和響應速度。Linux系統管理員可能常常會遇到系統不穩定、響應速度慢等問題,例如在Linux上搭建了一個Web服務,常常出現網頁沒法打開、打開速度慢等現象。遇到這些問題,就有人會抱怨Linux系統很差,其實這些都是表面現象。操做系統完成一個任務是與系統自身設置、網絡拓樸結構、路由設備、路由策略、接入設備、物理線路等多個方面都密切相關的,任何一個環節出現問題,都會影響整個系統的性能。所以,當Linux應用出現問題時,應當從應用程序、操做系統、服務器硬件、網絡環境等方面綜合排查,定位問題出如今哪一個部分,而後集中解決。

1.2 ×××能優化方案
查找系統性能瓶頸是個複雜而耗時的過程,須要在應用程序、操做系統、服務器硬件、網絡環境等方面進行查找和定位,影響性能最大的是應用程序和操做系統兩個方面,由於這兩個方面出現的問題不易察覺,隱蔽性很強。而硬件、網絡方面出現的問題,通常都能立刻定位。一旦找到了系統性能問題,解決起來就很是迅速和容易,例如發現系統硬件存在問題,若是是物理故障,那麼更換硬件就能夠了,若是是硬件性能不能知足需求,升級硬件就能夠了;若是發現是網絡問題,好比帶寬不夠、網絡不穩定,只需優化和升級網絡便可;若是發現是應用程序問題,修改或優化軟件系統便可;而若是是操做系統配置問題,修改系統參數、修改系統配置便可。
可見,只要找到了性能瓶頸,就能夠×××能優化方案,有標準、有目的地進行系統優化。

1.3 使系統硬件和軟件資源的使用達到平衡
Linux操做系統是一個開源產品,也是一個開源軟件的實踐和應用平臺,在這個平臺下由無數的開源軟件支撐,常見的有Apache、Tomcat、MySQL、PHP等。開源軟件的最大理念是自由、開放,那麼Linux做爲一個開源平臺,最終要實現的是經過這些開源軟件的支持,以最低廉的成本,達到應用性能的最優化。可是,系統的性能問題並不是是孤立的,解決了一個性能瓶頸,可能會出現另外一個性能瓶頸,因此說性能優化的最終目的是:在必定範圍內使系統的各項資源使用趨於合理並保持必定的平衡,即系統運行良好的時候偏偏就是系統資源達到了一個平衡狀態的時候。而在操做系統中,任何一項資源的過分使用都會破壞這種平衡狀態,從而致使系統響應緩慢或者負載太高。例如,CPU資源的過分使用會形成系統中出現大量的等待進程,致使應用程序響應緩慢,而進程的大量增長又會致使系統內存資源的增長,當物理內存耗盡時,系統就會使用虛擬內存,而虛擬內存的使用又會形成磁盤I/O的增長並加大CPU的開銷。所以,系統性能的優化就是在硬件、操做系統、應用軟件之間找到一個平衡點。

2、 分析系統性能涉及的人員

2.1        Linux系統管理人員
在作性能優化過程當中,系統管理人員承擔着很重要的任務,首先,系統管理人員要了解和掌握操做系統的當前運行狀態,例如系統負載、內存狀態、進程狀態、CPU負荷等信息,這些信息是檢測和判斷系統性能的基礎和依據;其次,系統管理人員還有掌握系統的硬件信息,例如磁盤I/O、CPU型號、內存大小、網卡帶寬等參數信息,而後根據這些信息綜合評估系統資源的使用狀況;第三,做爲一名系統管理人員,還要掌握應用程序對系統資源的使用狀況,更深刻的一點就是要了解應用程序的運行效率,例如是否有程序BUG、內存溢出等問題,經過對系統資源的監控,就能發現應用程序是否存在異常,若是確實是應用程序存在問題,須要把問題馬上反映給程序開發人員,進而改進或升級程序。
性能優化自己就是一個複雜和繁瑣的過程,系統管理人員只有瞭解了系統硬件信息、網絡信息、操做系統配置信息和應用程序信息纔能有針對性地的展開對服務器性能優化,這就要求系統管理員有充足的理論知識、豐富的實戰經驗以及縝密分析問題的頭腦。

2.2        系統架構設計人員
系統性能優化涉及的第二類人員就是應用程序的架構設計人員。若是系統管理人員在通過綜合判斷後,發現影響性能的是應用程序的執行效率,那麼程序架構設計人員就要及時介入,深刻了解程序運行狀態。首先,系統架構設計人員要跟蹤瞭解程序的執行效率,若是執行效率存在問題,要找出哪裏出現了問題;其次,若是真的是架構設計出現了問題,那麼就要立刻優化或改進系統架構,設計更好的應用系統架構。

2.3        軟件開發人員
系統性能優化最後一個環節涉及的是程序開發人員,在系統管理員或架構設計人員找到程序或結構瓶頸後,程序開發人員要立刻介入進行相應的程序修改。修改程序要以程序的執行效率爲基準,改進程序的邏輯,有針對性地進行代碼優化。例如,系統管理人員在系統中發現有條SQL語句耗費大量的系統資源,抓取這條執行的SQL語句,發現此SQL語句的執行效率太差,是開發人員編寫的代碼執行效率低形成的,這就須要把這個信息反饋給開發人員,開發人員在收到這個問題後,能夠有針對性的進行SQL優化,進而實現程序代碼的優化。
從上面這個過程能夠看出,系統性能優化通常遵循的流程是:首先系統管理人員查看系統的總體情況,主要從系統硬件、網絡設備、操做系統配置、應用程序架構和程序代碼五個方面進行綜合判斷,若是發現是系統硬件、網絡設備或者操做系統配置問題,系統管理員能夠根據狀況自主解決;若是發現是程序結構問題,就須要提交給程序架構設計人員;若是發現是程序代碼執行問題,就交給開發人員進行代碼優化。這樣就完成了一個系統性能優化的過程。node

3、影響Linux性能的各類因素

3.1 系統硬件資源
1.CPU
CPU是操做系統穩定運行的根本,CPU的速度與性能在很大程度上決定了系統總體的性能,所以,CPU數量越多、主頻越高,服務器性能也就相對越好。但事實並不是徹底如此。
目前大部分CPU在同一時間內只能運行一個線程,超線程的處理器能夠在同一時間運行多個線程,所以,能夠利用處理器的超線程特性提升系統性能。在Linux系統下,只有運行SMP內核才能支持超線程,可是,安裝的CPU數量越多,從超線程得到的性能方面的提升就越少。另外,Linux內核會把多核的處理器看成多個單獨的CPU來識別,例如兩個4核的CPU,在Lnux系統下會被看成8個單核CPU。可是從性能角度來說,兩個4核的CPU和8個單核的CPU並不徹底等價,根據權威部門得出的測試結論,前者的總體性能要比後者低25%~30%。
可能出現CPU瓶頸的應用有郵件服務器、動態Web服務器等,對於這類應用,要把CPU的配置和性能放在主要位置。
2.內存
內存的大小也是影響Linux性能的一個重要的因素,內存過小,系統進程將被阻塞,應用也將變得緩慢,甚至失去響應;內存太大,致使資源浪費。Linux系統採用了物理內存和虛擬內存兩種方式,虛擬內存雖然能夠緩解物理內存的不足,可是佔用過多的虛擬內存,應用程序的性能將明顯降低,要保證應用程序的高性能運行,物理內存必定要足夠大;可是過大的物理內存,會形成內存資源浪費,例如,在一個32位處理器的Linux操做系統上,超過8GB的物理內存都將被浪費。所以,要使用更大的內存,建議安裝64位的操做系統,同時開啓Linux的大內存內核支持。
因爲處理器尋址範圍的限制,在32位Linux操做系統上,應用程序單個進程最大隻能使用2GB的內存,這樣以來,即便系統有更大的內存,應用程序也沒法「享」用,解決的辦法就是使用64位處理器,安裝64位操做系統。在64位操做系統下,能夠知足全部應用程序對內存的使用需求 ,幾乎沒有限制。
可能出現內存性能瓶頸的應用有打印服務器、數據庫服務器、靜態Web服務器等,對於這類應用要把內存大小放在主要位置。
3.磁盤I/O性能
磁盤的I/O性能直接影響應用程序的性能,在一個有頻繁讀寫的應用中,若是磁盤I/O性能得不到知足,就會致使應用停滯。好在現今的磁盤都採用了不少方法來提升I/O性能,好比常見的磁盤RAID技術。
   RAID的英文全稱爲:Redundant Array of Independent Disk,即獨立磁盤冗餘陣列,簡稱磁盤陣列。RAID經過將多塊獨立的磁盤(物理硬盤)按不一樣方式組合起來造成一個磁盤組(邏輯硬盤),從而提供比單個硬盤更高的I/O性能和數據冗餘。
經過RAID技術組成的磁盤組,就至關於一個大硬盤,用戶能夠對它進行分區格式化、創建文件系統等操做,跟單個物理硬盤如出一轍,惟一不一樣的是RAID磁盤組的I/O性能比單個硬盤要高不少,同時在數據的安全性也有很大提高。
根據磁盤組合方式的不一樣,RAID能夠分爲RAID0,RAID一、RAID二、RAID三、RAID四、RAID五、RAID六、RAID七、RAID0+一、RAID10等級別,經常使用的RAID級別有RAID0、RAID一、RAID五、RAID0+1,這裏進行簡單介紹。
    RAID 0:經過把多塊硬盤粘合成一個容量更大的硬盤組,提升了磁盤的性能和吞吐量。這種方式成本低,要求至少兩個磁盤,可是沒有容錯和數據修復功能,於是只能用在對數據安全性要求不高的環境中。
    RAID 1:也就是磁盤鏡像,經過把一個磁盤的數據鏡像到另外一個磁盤上,最大限度地保證磁盤數據的可靠性和可修復性,具備很高的數據冗餘能力,但磁盤利用率只有50%,於是,成本最高,多用在保存重要數據的場合。
    RAID5:採用了磁盤分段加奇偶校驗技術,從而提升了系統可靠性,RAID5讀出效率很高,寫入效率通常,至少須要3塊盤。容許一塊磁盤故障,而不影響數據的可用性。
    RAID0+1:把RAID0和RAID1技術結合起來就成了RAID0+1,至少須要4個硬盤。此種方式的數據除分佈在多個盤上外,每一個盤都有其鏡像盤,提供全冗餘能力,同時容許一個磁盤故障,而不影響數據可用性,並具備快速讀/寫能力。
經過了解各個RAID級別的性能,能夠根據應用的不一樣特性,選擇適合自身的RAID級別,從而保證應用程序在磁盤方面達到最優性能。
4.網絡寬帶
Linux下的各類應用,通常都是基於網絡的,所以網絡帶寬也是影響性能的一個重要因素,低速的、不穩定的網絡將致使網絡應用程序的訪問阻塞,而穩定、高速的網絡帶寬,能夠保證應用程序在網絡上暢通無阻地運行。幸運的是,如今的網絡通常都是千兆帶寬或光纖網絡,帶寬問題對應用程序性能形成的影響也在逐步下降。

3.2 操做系統相關資源

基於操做系統的性能優化也是多方面的,能夠從系統安裝、系統內核參數、網絡參數、文件系統等幾個方面進行衡量,下面依次進行簡單介紹。
1.系統安裝優化
系統優化能夠從安裝操做系統開始,當安裝Linux系統時,磁盤的劃分,SWAP內存的分配都直接影響之後系統的運行性能,例如,磁盤分配能夠遵循應用的需求:對於對寫操做頻繁而對數據安全性要求不高的應用,能夠把磁盤作成RAID 0;而對於對數據安全性較高,對讀寫沒有特別要求的應用,能夠把磁盤作成RAID 1;對於對讀操做要求較高,而對寫操做無特殊要求,並要保證數據安全性的應用,能夠選擇RAID 5;對於對讀寫要求都很高,而且對數據安全性要求也很高的應用,能夠選擇RAID 01。這樣經過不一樣的應用需求設置不一樣的RAID級別,在磁盤底層對系統進行優化操做。
隨着內存價格的下降和內存容量的日益增大,對虛擬內存SWAP的設定,如今已經沒有了所謂虛擬內存是物理內存兩倍的要求,可是SWAP的設定仍是不能忽略,根據經驗,若是內存較小(物理內存小於4GB),通常設置SWAP交換分區大小爲內存的2倍;若是物理內存大於4GB小於16GB,能夠設置SWAP大小等於或略小於物理內存便可;若是內存大小在16GB以上,原則上能夠設置SWAP爲0,但並不建議這麼作,由於設置必定大小的SWAP仍是有必定做用的。
2.內核參數優化
系統安裝完成後,優化工做並無結束,接下來還能夠對系統內核參數進行優化,不過內核參數的優化要和系統中部署的應用結合起來總體考慮。例如,若是系統部署的是Oracle數據庫應用,那麼就須要對系統共享內存段(kernel.shmmax、kernel.shmmni、kernel.shmall)、系統信號量(kernel.sem)、文件句柄(fs.file-max)等參數進行優化設置;若是部署的是Web應用,那麼就須要根據Web應用特性進行網絡參數的優化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse、net.core.somaxconn等網絡內核參數。
3.文件系統優化
文件系統的優化也是系統資源優化的一個重點,在Linux下可選的文件系統有ext二、ext三、xfs、ReiserFS,根據不一樣的應用,選擇不一樣的文件系統。
Linux標準文件系統是從VFS開始的,而後是ext,接着就是ext2,應該說,ext2是Linux上標準的文件系統,ext3是在ext2基礎上增長日誌造成的,從VFS到ext3,其設計思想沒有太大變化,都是早期UNIX家族基於超級塊和inode的設計理念。
XFS文件系統是SGI開發的一個高級日誌文件系統,後來移植到了Linux系統下,XFS經過分佈處理磁盤請求、定位數據、保持Cache 的一致性來提供對文件系統數據的低延遲、高帶寬的訪問,所以,XFS極具伸縮性,很是健壯,具備優秀的日誌記錄功能、可擴展性強、快速寫入性能等優勢。
ReiserFS是在Hans Reiser領導下開發出來的一款高性能的日誌文件系統,它經過徹底平衡樹結構來管理數據, 包括文件數據,文件名及日誌支持等,與ext2/ext3相比,最大的優勢是訪問性能和安全性大幅提高。ReiserFS具備高效、合理利用磁盤空間,先進的日誌管理機制,特有的搜尋方式,海量磁盤存儲等優勢。

3.3 應用程序軟件資源
應用程序的優化實際上是整個優化工程的核心,若是一個應用程序存在BUG,那麼即便全部其餘方面都達到了最優狀態,整個應用系統仍是性能低下,因此,對應用程序的優化是性能優化過程的重中之重,這就對程序架構設計人員和程序開發人員提出了更高的要求。數據庫

相關文章
相關標籤/搜索