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



1、幾種典型應用對系統資源使用的特色

1.1 以靜態內容爲主的Web應用
這類應用的一個主要特色是小文件居多,而且讀操做頻繁,Web服務器通常爲Apache或Nginx,由於這兩個HTTP服務器對靜態資源的處理很是迅速和高效。在Web訪問量不大時,能夠直接對外提供服務,可是在有很大併發請求時,單一的Web服務沒法支撐大量的客戶端訪問,此時就須要由多臺Web服務器組成的負載集羣系統。爲了實現更高效的訪問,在最前端還能夠搭建Cache服務器,也就是將靜態資源文件緩存到操做系統內存中直接進行讀操做,由於直接從內存讀取數據要比從硬盤讀數據效率高不少,因此在Web前端搭建Cache服務器能夠大大提升併發訪問性能。經常使用的Cache軟件有Squid、Varinsh等。
Cache服務器雖然能夠提升訪問性能,但要求服務器有很大的內存,當系統內存充足時,能夠緩解磁盤隨機讀的壓力;當內存太小或者內存不足時,系統就會使用虛擬內存,而虛擬內存的使用會引發磁盤I/O的增大,當磁盤I/O增大時,CPU的開銷也隨之增長。
在高併發訪問時,還存在另一個問題,就是網絡帶寬瓶頸,若是客戶端訪問量很大且帶寬不夠,就會阻塞網絡,影響訪問,所以,在構建基於Web的網絡應用時,網絡帶寬也是必須考慮的一個因素。

1.2 以動態內容爲主的Web應用
這類應用的一個特色是頻繁地執行寫操做,例如Java、PHP、Perl、CGI等,會致使CPU資源消耗嚴重。由於動態程序的執行要進行編譯、讀取數據庫等操做,而這些操做都會消耗CPU資源,所以,一個基於動態程序的Web應用,應該選擇多個性能較高的CPU,這將對系統總體性能的提升有很大幫助。
基於動態內容的Web應用在高併發訪問時,系統執行的進程數會不少,所以要注意負載的分配。因爲過多的進程會消耗大量系統內存,若是內存不足,就會使用虛擬內存,而虛擬內存的增長會致使磁盤寫操做頻繁,進而消耗CPU資源,所以要尋求一個硬件資源和軟件資源的平衡點,例如配置較大的內存和高性能的CPU,而在軟件方面可經過如Memcached加快程序與數據庫之間的訪問效率。

1.3 數據庫應用

數據庫應用的一個主要特色是消耗內存和磁盤I/O,而對CPU的消耗並非很大,所以最基本的作法就是爲數據庫服務器配置較大的內存和讀寫較快的磁盤陣列,例如,能夠爲數據庫服務器的磁盤選擇RAID五、RAID01等RAID級別。將Web Server與DB Server分離也是優化數據庫應用的一個經常使用作法。若是客戶端用戶對數據庫的請求過大,還能夠考慮採起數據庫的負載均衡方案,經過軟件負載均衡或硬件負載均衡的方式提升數據庫訪問性能。
對於數據庫中過大的表,能夠考慮進行拆分,也就是將一個大表拆分紅多個小表,再經過索引進行關聯處理,這樣能夠避免查詢大表形成的性能問題,由於表太大時,查詢遍歷全表會形成磁盤讀操做激增,進而出現讀操做等待的狀況。同時,數據庫中查詢語句複雜,大量的where子句,order by、group by排序語句等,容易使CPU出現瓶頸。最後,當數據更新時,數據更新量大或更新頻繁,也會形成磁盤寫操做激增,出現寫操做的瓶頸。這些也應該在程序代碼中避免。
在平常應用中,還有一種方法能夠顯著提升數據庫服務器的性能,那就是讀寫分離。 同時對數據庫進行讀和寫的操做,是效率極低的一種訪問方式,較好的作法是根據讀、寫的壓力和需求,分別創建兩臺結構徹底相同的數據庫服務器,將負責寫的臺服務器上的數據,定時複製給負責讀的服務器,經過讀寫的協做提升系統總體性能。
經過緩存方式也能夠提升數據庫的性能, 緩存是數據庫或對象在內存中的臨時容器,使用緩存可大幅減小數據庫的讀取操做,改由內存來提供數據。好比能夠在 Web Server和DB Server之間增長一層數據緩存層,在系統內存中創建被頻繁請求對象的副本,這樣一來,不訪問數據庫也可爲程序提供數據,如今應用很普遍的Memcached就是基於這個原理。
1.4 軟件下載應用

靜態資源下載服務器的主要特色是帶寬消耗嚴重,同時對存儲性能要求也很高,在下載量極高時,能夠採用多臺、多點服務器分流形式分擔下載負荷,在HTTP服務器方面,從高性能角度和減小服務器部署的角度考慮,推薦採用Lighttpd HTTP服務器,而不是採用傳統的Apache服務器,緣由是Apache使用阻塞模式的I/O操做,性能相對較差,併發能力有限,而Lighttpd使用異步I/O方式,處理資源下載的併發能力遠遠超過Apache。

1.5 流媒體服務應用
流媒體主要應用在視頻會議、視頻點播、遠程教育、在線直播等方面,這類應用主要的性能瓶頸是網絡帶寬和存儲系統帶寬(主要是讀操做),面對海量用戶,如何保障用戶接收到高清晰的、流暢的畫面,如何最大限度地節省網絡帶寬,這些都是流媒體應用要解決的首要問題。
對於流媒體服務器的優化,能夠從存儲策略、傳輸策略、調度策略、代理服務器緩存策略及流媒體服務器的體系結構設計等幾個方面進行考慮。在存儲方面,須要對視頻的編碼格式進行優化,進而節省空間,優化存儲性能;在傳輸方面,能夠採用智能流技術控制發送的速率,最大程度保障用戶觀看視頻的流暢性;在調度方面,能夠採用靜態調度和動態調度結合的方法;在代理服務器方面,能夠採用分段緩存、動態緩存等管理策略;在流媒體體系結構方面,能夠採用內存池和線程池技術改善內存消耗和線程過多對性能形成的影響。前端

相關文章
相關標籤/搜索