LAMP優化

LAMP系統優化是很是必要的,一個好的優化能使系統運做的越快,從而提升工做效率,下面我將從幾方面給你們詳細介紹下LAMP系統優化的內容。php

1、硬件優化linux

一、升級硬件的通常規則:對於 PHP 腳本而言,主要的瓶頸是 CPU ,對於靜態頁面而言,瓶頸是內存和網絡。一臺 400 Mhz 的普通奔騰機器所下載的靜態頁面就能讓 T3 專線(45Mbps)飽和。數據庫

二、採用 hdparm 來優化磁盤,通常能提高 IDE 磁盤讀寫性能 200%,可是對 SCSI 硬盤也有效果。(不一樣類型的硬盤對比)緩存

策略優化服務器

三、Apache 處理 PHP 腳本的速度要比靜態頁面慢 2-10 倍,所以儘可能採用多的靜態頁面,少的腳本。網絡

四、PHP 腳本若是不作緩衝,每次調用都須要編譯,所以,安裝一個 PHP 緩衝產品能提高 25-100% 的性能。session

五、若是你採用了 Linux 系統,建議升級內核到 2.4,由於靜態頁面由內核服務。負載均衡

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

七、不要在 Web 服務器上運行 X-Windows ,關掉沒有必要運行的進程。性能

八、若是可以用文本就不要用圖像,儘可能減少圖片的尺寸。

九、分散負載,把數據庫服務器放到另外的機器上去。採用另外低端的機器服務圖片和 HTML 頁面,若是全部的靜態頁面在另一臺服務器上處理,能夠設置 httpd.conf 中的 KeepAlives 爲 off ,來減小斷開鏈接的時間。

十、以上全部的方法都是針對單機而言的,若是你以爲系統仍是不夠快,能夠採用集羣,負載均衡,緩衝技術。採用 Squid 做爲緩衝,配置 Squid 的方法。

2、編譯優化

十一、把基於文件的會話切換到基於共享內存的會話。編譯 PHP 時採用 --with-mm 選項,在 php.ini 中設置 set session.save_handler=mm 。這個簡單的修改能讓會話管理時間縮短一半。

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

1三、編譯 PHP 時,建議採用以下的參數:

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

3、配置優化

1四、修改 httpd.conf :

# 關閉 DNS lookups,PHP 腳本只拿 IP 地址

HostnameLookups off

1五、若是網絡擁擠,CPU 資源不夠用,採用 PHP 的 HTML 壓縮功能:

output_handler = ob_gzhandler

PHP 4.0.4 的用戶請不要使用,由於存在內存泄漏問題。

1六、修改 httpd.conf 中的 SendBufferSize 爲你最大的頁面文件的大小。加大內核的 TCP/IP 寫緩衝大小。

1七、採用數據庫的持久鏈接時,不要把 MaxRequestsPerChild 設置得太大。

4、第三方軟件優化

1八、若是喜歡從修改 Apache 源碼入手,能夠安裝 lingerd。在頁面產生和發送後,每一個 Apache 進程都會浪費一段時光在客戶鏈接上,Lingerd 能接管這項工做,讓 Apache 迅速服務下一個客戶請求。

1九、若是你足夠勇敢的話,還能夠採用 Silicon Graphics 的 Accelerated Apache 補丁。這個工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。

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

5、Linux系統優化

1.清理服務器磁盤碎片:

不論Linux文件系統採用什麼文件格式(ext三、JFS、XFS、ReiserFS )、何種類型的硬盤(IDE 、SCSI),隨着時間的推移文件系統都會趨向於碎片化。ext三、JFS等高級文件系統能夠減小文件系統的碎片化,可是並無消除。在繁忙的數據庫服務器中,隨着時間的過去,文件碎片化將下降硬盤性能,硬盤性能從硬盤讀出或寫入數據時才能注意到。時間長了會發現每一個磁盤上確實積累了很是多的垃圾文件,釋放磁盤空間能夠幫助系統更好地工做。Linux最好的整理磁盤碎片的方法是作一個徹底的備份,從新格式化分區,而後從備份恢復文件。可是對於7×24小時工做關鍵任務服務器來講是比較困難的。Kleandisk是一個高效的磁盤清理工具,它能把磁盤上的文件分紅不一樣的"組",好比把全部的"core"文件歸成一組(Group),這樣要刪除全部core文件時只要刪除這個組就好了。core文件是當軟件運行出錯時產生的文件,它對於軟件開發人員比較有用,對於其餘用戶(好比電子郵件服務器)卻沒有任何意義。所以,若是沒有軟件開發的須要,見到core文件就能夠將其刪除。

二、開啓硬盤DMA

如今使用的IDE硬盤基本支持DMA66/100/133(直接內存讀取)可是Linux發行版本安裝後通常沒有打開,能夠 /etc/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 這樣之後每次開機,硬盤的 DMA 就會開啓,沒必要每次手動設定。添加先後你可使用命令:hdparm -Tt /dev/hda 來測試對比一下。

三、調整緩衝區刷新參數

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文件系統高效的緣由之一。

四、優化輸入輸出

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

如今兩塊網卡已經象一塊同樣工做了。這樣能夠提升集羣節點間的數據傳輸.bonding對於服務器來是個比較好的選擇,在沒有千兆網卡時,用兩塊100兆網卡做bonding,可大大提升服務器到交換機之間的帶寬.可是須要在交換機上設置鏈接bonding網卡的兩個子口映射爲同一個虛擬接口。編輯 /etc/modules.conf文件,加入以下內容,以使系統在啓動時加載Bonding模塊。 alias bond0 bonding options bond0 mode=0

「mode」的值表示工做模式,共有0、一、2和3四種模式,這裏設定爲0。Bonding工做在負載均衡(Load Balancing (round-robin))方式下,即兩塊網卡同時工做,這時理論上Bonding能提供兩倍的帶寬。Bonding運行在網卡的混雜(Promisc)模式下,並且它將兩塊網卡的MAC地址修改成同樣的。混雜模式就是網卡再也不只接收目的硬件地址是自身MAC地址的數據幀,而是能夠接收網絡上全部的幀。

五、減小虛擬終端機的數量。

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守護進程。

相關文章
相關標籤/搜索