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

一、幾種典型應用對系統資源使用的特點

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的消耗並不是很大,因此最基本的做法就是爲數據庫服務器配置較大的內存和讀寫較快的磁盤陣列,例如,可以爲數據庫服務器的磁盤選擇RAID5、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 流媒體服務應用
流媒體主要應用在視頻會議、視頻點播、遠程教育、在線直播等方面,這類應用主要的性能瓶頸是網絡帶寬和存儲系統帶寬(主要是讀操作),面對海量用戶,如何保障用戶接收到高清晰的、流暢的畫面,如何最大限度地節省網絡帶寬,這些都是流媒體應用要解決的首要問題。
對於流媒體服務器的優化,可以從存儲策略、傳輸策略、調度策略、代理服務器緩存策略及流媒體服務器的體系結構設計等幾個方面進行考慮。在存儲方面,需要對視頻的編碼格式進行優化,進而節省空間,優化存儲性能;在傳輸方面,可以採用智能流技術控制發送的速率,最大程度保障用戶觀看視頻的流暢性;在調度方面,可以採用靜態調度和動態調度結合的方法;在代理服務器方面,可以採用分段緩存、動態緩存等管理策略;在流媒體體系結構方面,可以採用內存池和線程池技術改善內存消耗和線程過多對性能造成的影響。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章