目前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 目錄下,這樣易於管理。安裝過程這裡筆者就不介紹了。