目前LAMP (Linux + Apache + MySQL + PHP) 近幾年來發展迅速,已經成為Web 服務器的事實標準。
LAMP這個詞的由來最早始於德國雜誌“c't Magazine”,Michael Kunze在1990年最先把這些公事包在一起創造了LAMP的縮寫字。這些組件雖然並不是開開始就設計為一起使用的,但是,這些開源軟體都可以很方便的隨時獲得並免費獲得。這就導致了這些組件經常在一起使用。在過去的幾年裡,這些組件的相容性不斷完善,在一起的應用情形變得非常普便。為了改善不同組件之間的協作,已經建立了某些擴充功能。目前,幾乎在所有的Linux發布版中都預設包含了“LAMP stack”的產品。這些產品組成了一個強大的Web應用程式平台。“LAMP stack”中的每一個組件都是一個FOSS(免費或者開源軟體/Free or Open Source Software)的執行個體。
FOSS方法的好處有三個方面。
第一,FOSS軟體的性質意味著應用程式可以免費下載,能夠讓更廣泛的人們不用付費就可以使用這個應用軟體。這種免費的方式對於廣大使用者特別具有吸引力。這些使用者如果不使用免費的軟體就需要付費購買“專業”的商用軟體工具。這在製作網站方面通常是一種昂貴的步驟。
第二,FOSS許可證是開放式的,因此對於基於FOSS技術的應用軟體的使用和限制都非常少。不需要為軟體的發布支付任何許可證費就可以開發和應用基於LAMP的工程。因此,這對業餘愛好者和專業人員都非常有吸引力。FOSS技術(包括LAMP)的增長和使用的主要原因是因為使用者能夠訪問其資源,修複故障和改善應用軟體的效能都非常容易。
與開源軟體許可證結合在一起,這種方法為許多企業簡化了開發過程,並且為企業提供了專有軟體或者商業軟體的限制中所沒有的靈活性。
本文我們將介紹基於LAMP組合的伺服器的效能最佳化技巧:
LAMP最佳化:清理伺服器磁碟片段
不論Linux檔案系統採用什麼檔案格式(ext3、JFS、XFS、ReiserFS )、何種類型的硬碟(IDE 、SCSI),隨著時間的推移檔案系統都會趨向於片段化。ext3、JFS等進階檔案系統可以減少檔案系統的片段化,但是並沒有消除。在繁忙的資料庫伺服器中,隨著時間的過去,檔案片段化將降低硬碟效能,硬碟效能從硬碟讀出或寫入資料時才能注意到。時間長了會發現每個磁碟上確實積累了非常多的垃圾檔案,釋放磁碟空間可以協助系統更好地工作。Linux最好的整理磁碟片段的方法是做一個完全的備份,重新格式化分區,然後從備份恢複檔案。但是對於7×24小時工作關鍵任務伺服器來說是比較困難的。
Kleandisk是一個高效的磁碟清理工具,它能把磁碟上的檔案分成不同的"組",比如把所有的"core"檔案歸成一組(Group),這樣要刪除所有core檔案時只要刪除這個組就行了。core檔案是當軟體運行出錯時產生的檔案,它對於軟體開發人員比較有用,對於其他使用者(比如電子郵件伺服器)卻沒有任何意義。因此,如果沒有軟體開發的需要,見到core檔案就可以將其刪除。
LAMP最佳化:開啟硬碟DMA
現在使用的IDE硬碟基本支援DMA66/100/133(直接記憶體讀取)但是Linux發行版本安裝後一般沒有開啟,可以/etc/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 這樣以後每次開機,硬碟的 DMA 就會開啟,不必每次手動設定。添加前後你可以使用命令:hdparm -Tt /dev/hda 來測試對比一下。
LAMP最佳化:調整緩衝區重新整理參數
Linux核心中,包含了一些對於系統運行態的可設定參數。緩衝重新整理的參數可以通過調整 /proc/sys/vm/bdflush檔案來完成,這個檔案的格式是這樣的:
- # cat /proc/sys/vm/bdflush
- 30 64 64 256 500 3000 60 0 0
每一欄是一個參數,其中最重要的是前面幾個參數。第一個數字是在"dirty"緩衝區達到多少的時候強制喚醒bdflush進程重新整理硬碟,第二個數字是每次讓bdflush進程重新整理多少個dirty塊。所謂dirty塊是必須寫到磁碟中的緩衝塊。接下來的參數是每次允許bd flush將多少個記憶體塊排入閒置緩衝塊列表。 以上值為RHEL 4.0中的預設值。可以使用兩種方法修改:
(1)使用命令
- # echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush
並將這條命令加到/etc/rc.d/rc.local檔案中去。
(2)在/etc/sysctl.conf 檔案中加入如下行:
- vm.bdflush = 100 128 128 512 5000 3000 60 0 0
以上的設定加大了緩衝區大小,降低了bdflush被啟動的頻度,VFS的緩衝重新整理機制是Linux檔案系統高效的原因之一。
LAMP最佳化:最佳化輸入輸出
I/O程式對Linux系統效能也是相當重要的,網路硬體I/O對伺服器尤其重要。現在大多數Linux伺服器使用10/100 Mb乙太網路。如果有較重的網路負載,則可以考慮千兆乙太網路卡。如果沒有能力購買千兆網卡的話:可以使用多塊網卡虛擬成為一塊網卡,具有相同的IP地址。這項技術,在Linux中,這種技術稱為Bonding。Bonding在Linux2.4以上核心中已經包含了,只需要在編譯的時候把網路裝置選項中的Bonding driver support選中見圖1。當然利用Bonding技術配置雙網卡綁定的前提條件是兩塊網卡晶片集型號相同,並且都具備獨立的BIOS晶片。
圖1 Linux核心的Bonding driver support選項
然後,重新編譯核心,重新起動電腦,執行如下命令:
- #ismod bonding
- #ifconfig eth0 down
- #ifconfig eth1 down
- #ifconfig bond0 ipaddress
- #ifenslave bond0 eth0
- #ifenslave bond0 eth1
現在兩塊網卡已經象一塊一樣工作了。這樣可以提高叢集節點間的資料轉送.bonding對於伺服器來是個比較好的選擇,在沒有千兆網卡時,用兩塊100兆網卡作bonding,可大大提高伺服器到交換器之間的頻寬.但是需要在交換器上設定串連bonding網卡的兩個子口映射為同一個虛擬介面。編輯/etc/modules.conf檔案,加入如下內容,以使系統在啟動時載入Bonding模組。
- alias bond0 bonding
- options bond0 mode=0
“mode”的值表示工作模式,共有0、1、2和3四種模式,這裡設定為0。Bonding工作在負載平衡(Load Balancing (round-robin))方式下,即兩塊網卡同時工作,這時理論上Bonding能提供兩倍的頻寬。Bonding運行在網卡的混雜(Promisc)模式下,而且它將兩塊網卡的MAC地址修改為一樣的。混雜模式就是網卡不再只接收目的硬體地址是自身MAC地址的資料幀,而是可以接收網路上所有的幀。
LAMP最佳化:減少虛擬終端機的數量
Linux安裝後系統預設是6個虛擬終端機,也就是 CTRL+ALT F1~F6 那六個,作為伺服器使用可以關掉其中四個,只留下 CTRL+ALT F1~F2,大約省下 4 Mbytes 的記憶體,但是這樣一來,X-Window 會從原來的 CTRL+ALT F7 變成 CTRL+ALT F3 。 修改 /etc/inittab 中,將 mingetty 3 ~6 全部加上 # 字型大小 。
LAMP最佳化:關閉一些不用的服務
Linux伺服器在啟動時需要啟動很多系統服務,它們向本地和網路使用者提供了Linux的系統功能介面,直接面嚮應用程式和使用者。提供這些服務的程式是由運行在背景守護進程(daemons)來執行的。守護進程是生存期長的一種進程。它們獨立於控制終端並且周期性的執行某種任務或等待處理某些發生的事件。他們常常在系統引導裝入時啟動,在系統關閉時終止。
linux系統有很多守護進程,大多數伺服器都是用守護進程實現的。如Web服務http等。同時,守護進程完成許多系統任務,比如,作業規划進程crond、列印進程lqd等。有些書籍和資料也把守護進程稱作:“服務”。關閉服務方法請查看筆者的文章:深入理解Linux守護進程。鏈結:http://www.ccw.com.cn/server/yyjq/htm2005/20050914_14ND5_1.htm 。
LAMP最佳化:使用工具軟體PowerTweak最佳化系統
Powertweak for linux0.99能夠監視你的系統和網路連接,並且可以將你的系統設定為最佳。
軟體安裝:
- #wegt http://prdownloads.sourceforge.net/powertweak/powertweak-0.99.2-1.i386.rpm;
- #wegt http://prdownloads.sourceforge.net/powertweak/powertweak-gtk-0.99.2-1.i386.rpm
- #rpm –ivh powertweak-0.99.2-1.i386.rpm
- #rpm –ivh powertweak-gtk-0.99.2-1.i386.rpm
其中powertweak-0.99.2-1.i386.rpm是主程式, powertweak-gtk-0.99.2-1.i386.rpm是KDE環境下的圖形前端。程式安裝後會自動添加到主選單的“系統工具中”,運行介面見圖2。
圖-2 powertweak效能最佳化程式
powertweak能夠對X86構架處理器,晶片集,Voodoo等進行最佳化設定的軟體,支援大多數的中央處理器和晶片集,包括Intel,AMD,與Cyrix,內建四種最佳化設定功能,可以自行設定要最佳化的硬體(中央處理器、CD-ROM、PCI匯流排、硬碟、磁碟陣列)、核心(包括日誌、安全、資源)、網路(包括ip、TCP、Core、 ICMP、Unix domain Routing、 Arp 、Token Ring)、虛擬檔案系統、效能記憶體管理(頁面分配、快取、交換分區)。Powertweak是一個強大的系統效能調節軟體。但是對於使用者要求比較高,許多選項要求你對Linux系統比較瞭解才能準確填寫。
關於Apache、PHP、Mysql軟體安裝,我們建議安裝它們的最新版本,並且從源碼安裝程式。雖然很多Linux發行版本(RedHat 、Suse、TurboLinux)有相應的rpm包, 但從源碼編譯安裝程式,會適合自己的機器設定,我們一般會裝到 /usr/local 目錄下,這樣易於管理。安裝過程這裡筆者就不介紹了。