摘 要:作為一種資源的組織和表達機制,Web已成為Internet最主要的信息傳送媒介。因此Web的性能已經(jīng)成為判斷一個網(wǎng)站成功與否的一個重要評估標準。而Web服務器則是決定Web性能的重要環(huán)節(jié)。Web服務器性能就是指一個Web服務器響應用戶請求的能力。為了提高Web服務器的性能人們進行了諸多嘗試,已經(jīng)取得了可喜的成果。文章通過對前人研究結果的分析,提出了在具體應用環(huán)境中優(yōu)化Web服務器的方法和策略。首先,利用將影響服務器性能的因素(硬件,網(wǎng)絡,軟件)分門別類;其次,利用性能測試與壓力測試工具測量當前系統(tǒng)的性能水平;再次,通過將影響性能的因素進行合理組合和調(diào)試并記錄不同條件下的性能水平;再次,綜合考量當前web應用的最大訪問量要求和不同條件下的性能水平,定制一套優(yōu)化方案;最后,根據(jù)優(yōu)化方案提出Web服務器的優(yōu)化方法和策略。
關鍵詞:web服務器;性能優(yōu)化;研究
1 介紹
2 調(diào)試
2.1 調(diào)試jvm
2.2 調(diào)試內(nèi)存
2.2.1 設置 kernel swap 和 pdflush behavior
存儲在/proc/sys/vm/swappiness中的參數(shù)可以用來設置內(nèi)存頁與硬盤交換的相關參數(shù),如果要降低對swap的使用,可以通過設置此值來達到目的。對于那些快速的硬盤子系統(tǒng),可能會造成大量的臟內(nèi)存頁,/proc/sys/vm/dirty_background_ratio可用于控制文件系統(tǒng)的pdflush進程,在何時刷新磁盤。單位是百分比,表示系統(tǒng)內(nèi)存的百分比,意思是當寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,pdflush開始向磁盤寫出數(shù)據(jù)。增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當你需要持續(xù)、恒定的寫入場合時,應該降低其數(shù)值。另一個相關的設置是/proc/sys/vm/dirty_ratio這個參數(shù)控制文件系統(tǒng)的文件系統(tǒng)寫緩沖區(qū)的大小,單位是百分比,表示系統(tǒng)內(nèi)存的百分比,表示當寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,開始向磁盤寫出數(shù)據(jù)。增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當你需要持續(xù)、恒定的寫入場合時,應該降低其數(shù)值。
2.2.2 HugeTLBfs
2.3 調(diào)試CPU
2.3.1 調(diào)整進程優(yōu)先級
系統(tǒng)中運行的每個進程都有一個優(yōu)先級(亦稱\"nice 值\"),其范圍從-20(最高優(yōu)先級)到19 (最低優(yōu)先級)。默認情況下,進程的優(yōu)先級是0(“基本”調(diào)度優(yōu)先級)。優(yōu)先級比較大的進程(nice值比較小,最低到-20)相對優(yōu)先級比較小的進程(直到19)將比較頻繁地被調(diào)度運行,因此就擁有更多的進程周期。配置進程優(yōu)先權對多任務環(huán)境的linux很有用,可以改善系統(tǒng)性能。還可以把進程運行到指定的CPU上,這樣一來,把不重要的進程安排到某個CPU,可以大大改善系統(tǒng)整體性能。修改進程優(yōu)先級的命令主要有兩個:nice,renice。
2.3.2 NUMA systems
由于傳統(tǒng)的SMP系統(tǒng)中,所有處理器都共享系統(tǒng)總線,因此當處理器的數(shù)目增大時,系統(tǒng)總線的競爭沖突加大,系統(tǒng)總線將成為瓶頸,所以目前SMP系統(tǒng)的CPU數(shù)目一般只有數(shù)十個,可擴展能力受到極大限制。NUMA技術有效結合了SMP系統(tǒng)易編程性和MPP(大規(guī)模并行)系統(tǒng)易擴展性的特點,較好解決了SMP系統(tǒng)的可擴展性問題,已成為當今高性能服務器的主流體系結構之一。盡管當前的linux發(fā)行版已經(jīng)很好的支持NUMA系統(tǒng),但是應用程序并不總是這樣,由一個非NUMA系統(tǒng)帶來有優(yōu)化瓶頸往往難以被發(fā)現(xiàn)。numactl命令。是設定進程NUMA策略的命令行工具。對于那些無法修改和重新編譯的程序,它可以進行非常有效的策略設定。Numactl使管理員可以通過簡單的命令行調(diào)用來設定進程的策略, 并可以集成到管理腳本中。
2.3.3 調(diào)優(yōu)建議
首先應確保當前的優(yōu)化問題是由CPU而不是由其他子系統(tǒng)引起的,如果處理器存在有優(yōu)化瓶頸,那么可以采取以下措施:(1)確定當前的操作系統(tǒng)內(nèi)沒有不必要的程序在被執(zhí)行(使用ps -ef),如果有這樣的程序,請終止這些程序。(2)使用top命令查看是否有非關鍵且CPU密集型,如果有的話使用renice修改它們的優(yōu)先級。(3)在一個基于SMP的系統(tǒng)中,使用taskset將進程和CPUs綁定,以此來確保進程不會在處理器之間跳躍而引起的緩存刷新。(4)從你的應用程序角度出發(fā),如果你的應用程序的設計是為了更高效的使用CPU,那么使用更高效的CPU而不是增加CPU個數(shù)更為有效。例如,一個單線程的應用程序會在一個處理速度更快的處理器上有更優(yōu)異的表現(xiàn)。(5)使用最新的驅(qū)動和固件,因為這會影響他們在CPU上的負載。
2.4 調(diào)試文件系統(tǒng)
(1)同步文件訪問。某些應用程序需要執(zhí)行文件同步系統(tǒng)操作,在這樣的情況下Anticipatory算法有最小的吞吐量和最高的延時,而另外的三種算法則有很好的表現(xiàn)。(2)數(shù)據(jù)庫系統(tǒng)。由于大多數(shù)的數(shù)據(jù)庫系統(tǒng)的工作負載時面向搜索的,所以基于Deadline算法的特征,此算法可以使系統(tǒng)的工作負載得到優(yōu)化。(3)單一ATA 或者SATA硬盤子系統(tǒng)。如果你選擇使用單一ATA 或者SATA硬盤子系統(tǒng),那么可以考慮使用Anticipatory算法,因為該算法會重新寫磁盤以此適應在單個磁盤頭中找到這些設備。
2.4.4 調(diào)優(yōu)建議
(1)如果服務器的負載是連續(xù)的,可以添加一個更快地磁盤控制器。如果負載是隨機的,可以添加更多的磁盤控制器來解決。(2)增加更多的RAM,這樣會增加磁盤緩存,從而間接提高硬盤響應時間。(3)考慮使用條塊化邏輯卷替換單個的大容量磁盤或者非條塊邏輯卷。(4)在RAID environment環(huán)境下,增加更多的硬盤驅(qū)動,這將通過多個物理硬盤傳輸數(shù)據(jù),有利于提高讀寫性能。這也將增加I/O數(shù)。同樣,使用硬件RAID代替有l(wèi)inux提供的軟件實現(xiàn)RAID。
2.5 調(diào)試網(wǎng)絡
2.5.1 增加網(wǎng)絡緩沖區(qū)
2.5.3 調(diào)優(yōu)建議
(1)確保網(wǎng)卡配置與路由器和交換機的配置匹配。(2)修改網(wǎng)絡組織結構。(3)使用更快的網(wǎng)卡。(4)調(diào)整適當?shù)腎PV4 TCP內(nèi)核參數(shù),一些與安全相關的參數(shù)還可以提高性能。(5)增加更多的網(wǎng)卡組成一個適配器組。
3 結束語
在開始調(diào)試你的系統(tǒng)之前,你應當確保排除了常見問題并發(fā)現(xiàn)了原因。你應當對整個調(diào)試工作有整體規(guī)劃,假如你采取隨機調(diào)試的方法的話,將有可能使情況變得更糟。并且按照以下幾點來做調(diào)優(yōu)工作:
確定服務器的應用類型,一個IO密集型應用程序需要使用大量的內(nèi)存和底層存儲系統(tǒng)和少量的CPU和網(wǎng)絡資源(通常數(shù)據(jù)庫被認為是IO范圍的應用程序);一個CPU密集型應用程序需要使用大量的CPU資源(web服務器和郵件服務器通常被認為是CPU密集型應用程序)。
在確定服務器類型之后,要明確的是需要服務器達到什么樣的性能基準,并以此做出相應的取舍,例如在一個CPU密集型應用程序中,應當限制IO程序?qū)Y源的占用。在確定性能基準后進行調(diào)試:每次只調(diào)試一個參數(shù),這樣可以減小調(diào)試過程的復雜性;調(diào)試參數(shù)后運行基準測試以此來驗證調(diào)試效果;反復調(diào)試直至到達要求。
參考文獻
[1]Eduardo Ciliendo,Takechika Kunimasa,Byron Braswell. Linux Performance and Tuning Guidelines. July 2007
[2]Neil Horman. Understanding Virtual Memory In Red Hat Enterprise Linux 4. December 13, 2005
[3]趙 軍, Linux 下網(wǎng)絡性能優(yōu)化方法簡析. 2010 年 11 月 25 日
[4]NIXCRAFT. Linux Tune Network Stack (Buffers Size) To Increase Networking Performance. on MAY 20,2009 · 28
[5]扶凱.在linux系統(tǒng)中I/O 調(diào)度的選擇. 2010年01月3日
作者簡介:龍鵬,男(1987-),河南人,同濟大學軟件學院軟件工程專業(yè)2011級碩士,主要研究方向J2EE。