當前位置:才華齋>計算機>php語言>

Linux+Apache+Mysql+PHP優化技巧

php語言 閱讀(1.3W)

LNAMP架構受到很多IT企業的青睞,以下就是小編精心推薦Linux+Apache+Mysql+PHP優化技巧,希望對大家有幫助!

Linux+Apache+Mysql+PHP優化技巧

LAMP這個詞的由來最早始於德國雜誌“c't Magazine”,Michael Kunze在1990年最先把這些專案組合在一起創造了LAMP的縮寫字。這些元件雖然並不是開開始就設計為一起使用的,但是,這些開源軟體都可以很方便的隨時獲得並免費獲得。這就導致了這些元件經常在一起使用。在過去的幾年裡,這些元件的相容性不斷完善,在一起的應用情形變得非常普便。為了改善不同元件之間的協作,已經建立了某些擴充套件功能。目前,幾乎在所有的Linux釋出版中都預設包含了“LAMP stack”的產品。這些產品組成了一個強大的Web應用程式平臺

LAMP 平臺由四個元件組成,呈分層結構。每一層都提供了整個軟體棧的一個關鍵部分:

Linux:Linux 處在最低層,提供作業系統。其他每個元件實際上也在 Linux 上執行。但是,並不一定侷限於 Linux,如有必要,其他元件也可以在 Microsoft Windows、Mac OS X 或 UNIX 上執行。

Apache:次低層是 Apache,它是一個 Web 伺服器。Apache 提供可讓使用者獲得 Web 頁面的機制。Apache 是一款穩定的、支援關鍵任務的伺服器,Internet 上超過 65% 的網站都使用它作為 Web 伺服器。PHP 元件實際上是在 Apache 中,動態頁面可以通過 Apache 和 PHP 建立。

MySQL:MySQL 提供 LAMP 系統的資料儲存端。有了 MySQL,便可以獲得一個非常強大的、適合執行大型複雜站點的資料庫。在 Web 應用程式中,所有資料、產品、帳戶和其他型別的資訊都存放在這個資料庫中,通過 SQL 語言可以很容易地查詢這些資訊。

PHP:PHP 是一門簡單而有效的程式語言,它像是粘合劑,可以將 LAMP 系統所有其他的元件粘合在一起。您可以使用 PHP 編寫能訪問 MySQL 資料庫中的資料和 Linux 提供的一些特性的動態內容。

[檢測工具]

為了得到完整的除錯結果,建議你採用 ApacheBench 或者 httperf之類的軟體。如果你對非 LAMP 架構的伺服器測試有興趣的話,建議你採用微軟的免費軟體: Web Application Stress Tool(需要 NT 或者 2000)。(其它伺服器測試工具)

檢測 Apache ,採用 top d 1 顯示所有程序的 CPU 和記憶體情況。另外,還採用 apachectl status 命令

[硬體優化]

1、升級硬體的一般規則:對於 PHP 指令碼而言,主要的瓶頸是 CPU ,對於靜態頁面而言,瓶頸是記憶體和網路。一臺 400 Mhz 的普通奔騰機器所下載的靜態頁面就能讓 T3 專線(45Mbps)飽和。

2、採用 hdparm 來優化磁碟,一般能提升 IDE 磁碟讀寫效能 200%,但是對 SCSI 硬碟也有效果。(不同型別的硬碟對比)

[策略優化]

3、Apache 處理 PHP 指令碼的速度要比靜態頁面慢 2-10 倍,因此儘量採用多的靜態頁面,少的指令碼。

4、PHP 指令碼如果不做緩衝,每次呼叫都需要編譯,因此,安裝一個 PHP 緩衝產品能提升 25-100% 的效能。

5、如果你採用了 Linux 系統,建議升級核心到 2.4,因為靜態頁面由核心服務。

6、另外一項緩衝技術是把不常修改的 PHP 頁面採用 HTML 緩衝輸出。

7、不要在 Web 伺服器上執行 X-Windows ,關掉沒有必要執行的程序。

8、如果能夠用文字就不要用影象,儘量減小圖片的尺寸。

9、分散負載,把資料庫伺服器放到另外的機器上去。採用另外低端的機器服務圖片和 HTML 頁面,如果所有的靜態頁面在另外一臺伺服器上處理,可以設定 中的 KeepAlives 為 off ,來減少斷開連線的時間。

10、以上所有的方法都是針對單機而言的,如果你覺得系統還是不夠快,可以採用叢集,負載均衡,緩衝技術。採用 Squid 作為緩衝,配置 Squid 的方法。

[編譯優化]

11、把基於檔案的會話切換到基於共享記憶體的會話。編譯 PHP 時採用 --with-mm 選項,在 中設定 set _handler=mm 。這個簡單的修改能讓會話管理時間縮短一半。

12、採用最新版本的 Apache ,並把 PHP 編譯其中,或者採用 DSO 模式,不要採用 CGI 方式。

13、編譯 PHP 時,建議採用如下的引數:

--enable-inline-optimization --disable-debug

[配置優化]

14、修改 :

# 關閉 DNS lookups,PHP 指令碼只拿 IP 地址

HostnameLookups off

15、如果網路擁擠,CPU 資源不夠用,採用 PHP 的 HTML 壓縮功能:

output_handler = ob_gzhandler

PHP 4.0.4 的使用者請不要使用,因為存在記憶體洩漏問題。

16、修改 中的 SendBufferSize 為你最大的頁面檔案的大小。加大核心的 TCP/IP 寫緩衝大小。

17、採用資料庫的持久連線時,不要把 MaxRequestsPerChild 設定得太大。

[第三方軟體優化]

18、如果喜歡從修改 Apache 原始碼入手,可以安裝 lingerd。在頁面產生和傳送後,每個 Apache 程序都會浪費一段時光在客戶連線上,Lingerd 能接管這項工作,讓 Apache 迅速服務下一個客戶請求。

19、如果你足夠勇敢的話,還可以採用 Silicon Graphics 的 Accelerated Apache 補丁。這個工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。

安裝一個 PHP 緩衝產品能提升 25-100% 的效能。

[Linux系統優化]

1、清理伺服器磁碟碎片:

不論Linux檔案系統採用什麼檔案格式(ext3、JFS、XFS、ReiserFS )、何種型別的硬碟(IDE 、SCSI),隨著時間的推移檔案系統都會趨向於碎片化。ext3、JFS等高階檔案系統可以減少檔案系統的碎片化,但是並沒有消除。在繁忙的資料庫伺服器中,隨著時間的過去,檔案碎片化將降低硬碟效能,硬碟效能從硬碟讀出或寫入資料時才能注意到。時間長了會發現每個磁碟上確實積累了非常多的垃圾檔案,釋放磁碟空間可以幫助系統更好地工作。Linux最好的整理磁碟碎片的方法是做一個完全的備份,重新格式化分割槽,然後從備份恢復檔案。但是對於7×24小時工作關鍵任務伺服器來說是比較困難的。Kleandisk是一個高效的磁碟清理工具,它能把磁碟上的檔案分成不同的"組",比如把所有的"core"檔案歸成一組(Group),這樣要刪除所有core檔案時只要刪除這個組就行了。core檔案是當軟體執行出錯時產生的檔案,它對於軟體開發人員比較有用,對於其他使用者(比如電子郵件伺服器)卻沒有任何意義。因此,如果沒有軟體開發的需要,見到core檔案就可以將其刪除。

2、開啟硬碟DMA

現在使用的IDE硬碟基本支援DMA66/100/133(直接記憶體讀取)但是Linux發行版本安裝後一般沒有開啟,可以 /etc/rc.d/l 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 這樣以後每次開機,硬碟的 DMA 就會開啟,不必每次手動設定。新增前後你可以使用命令:hdparm -Tt /dev/hda 來測試對比一下。

3、調整緩衝區重新整理引數

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/l檔案中去。

(2)在/etc/ 檔案中加入如下行: ush = 100 128 128 512 5000 3000 60 0 0

以上的設定加大了緩衝區大小,降低了bdflush被啟動的頻度,VFS的緩衝重新整理機制是Linux檔案系統高效的原因之一。

4、優化輸入輸出

I/O程式對Linux系統性能也是相當重要的,網路硬體I/O對伺服器尤其重要。現在大多數Linux伺服器使用10/100 Mb乙太網。如果有較重的網路負載,則可以考慮千兆乙太網卡。如果沒有能力購買千兆網絡卡的話:可以使用多塊網絡卡虛擬成為一塊網絡卡,具有相同的IP地址。這項技術,在Linux中,這種技術稱為Bonding。Bonding在Linux2.4以上核心中已經包含了,只需要在編譯的時候把網路裝置選項中的 Bonding driver support選中見圖1。當然利用Bonding技術配置雙網絡卡繫結的前提條件是兩塊網絡卡晶片組型號相同,並且都具備獨立的BIOS晶片。

然後,重新編譯核心,重新起動計算機,執行如下命令: #ismod bonding #ifconfig eth0 down #ifconfig eth1 down

#ifconfig bond0 ipaddress#ifenslave bond0 eth0#ifenslave bond0 eth1

現在兩塊網絡卡已經象一塊一樣工作了。這樣可以提高叢集節點間的資料傳輸ing對於伺服器來是個比較好的選擇,在沒有千兆網絡卡時,用兩塊100兆網絡卡作bonding,可大大提高伺服器到交換機之間的頻寬.但是需要在交換機上設定連線bonding網絡卡的兩個子口對映為同一個虛擬介面。編輯 /etc/檔案,加入如下內容,以使系統在啟動時載入Bonding模組。 alias bond0 bonding options bond0 mode=0

“mode”的值表示工作模式,共有0、1、2和3四種模式,這裡設定為0。Bonding工作在負載均衡(Load Balancing (round-robin))方式下,即兩塊網絡卡同時工作,這時理論上Bonding能提供兩倍的頻寬。Bonding執行在網絡卡的混雜(Promisc)模式下,而且它將兩塊網絡卡的MAC地址修改為一樣的。混雜模式就是網絡卡不再只接收目的硬體地址是自身MAC地址的資料幀,而是可以接收網路上所有的幀。

5、減少虛擬終端機的數量。

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 全部加上 # 字號 。

6. 關閉一些不用的服務

Linux伺服器在啟動時需要啟動很多系統服務,它們向本地和網路使用者提供了Linux的系統功能介面,直接面嚮應用程式和使用者。提供這些服務的程式是由執行在後臺的守護程序(daemons)來執行的。守護程序是生存期長的一種程序。它們獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。他們常常在系統引導裝入時啟動,在系統關閉時終止。linux系統有很多守護程序,大多數伺服器都是用守護程序實現的。如Web服務http 等。同時,守護程序完成許多系統任務,比如,作業規劃程序crond、列印程序lqd等。有些書籍和資料也把守護程序稱作:“服務”。關閉服務方法請檢視筆者的文章:深入理解Linux守護程序。