純手工打造每一篇開源資訊與技術乾貨,數十萬程式設計師和Linuxer已經關注。
Linux技術交流QQ群:2650582(六月份最新!!)
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 頁面,如果所有的靜態頁面在另外一臺伺服器上處理,可以設置 httpd.conf 中的 KeepAlives 為 off ,來減少斷開連接的時間。
10、以上所有的方法都是針對單機而言的,如果你覺得系統還是不夠快,可以採用集群,負載均衡,緩衝技術。採用 Squid 作為緩衝,配置 Squid 的方法。
[編譯優化]
11、把基於文件的會話切換到基於共享內存的會話。編譯 PHP 時採用 --with-mm 選項,在 php.ini 中設置 set session.save_handler=mm 。這個簡單的修改能讓會話管理時間縮短一半。
12、採用最新版本的 Apache ,並把 PHP 編譯其中,或者採用 DSO 模式,不要採用 CGI 方式。
13、編譯 PHP 時,建議採用如下的參數:
--enable-inline-optimization --disable-debug
[配置優化]
14、修改 httpd.conf :
# 關閉 DNS lookups,PHP 腳本只拿 IP 地址
HostnameLookups off
15、如果網絡擁擠,CPU 資源不夠用,採用 PHP 的 HTML 壓縮功能:
output_handler = ob_gzhandler
PHP 4.0.4 的用戶請不要使用,因為存在內存洩漏問題。
16、修改 httpd.conf 中的 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/rc.local 最後面加上一行: /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/rc.local文件中去。
(2)在/etc/sysctl.conf 文件中加入如下行:
vm.bdflush = 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
現在兩塊網卡已經象一塊一樣工作了。這樣可以提高集群節點間的數據傳輸.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地址的數據幀,而是可以接收網絡上所有的幀。
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守護進程。
原文來自: http://os.51cto.com/art/201706/542460.htm
《Linux就該這麼學》是由資深運維專家劉遄及全國多名紅帽架構師(RHCA)基於最新RHEL7系統共同編寫的高質量Linux技術自學教程,極其適合用於Linux技術入門教程或講課輔助教材。
☀ 劉遄老師QQ:5604241 微信:gnu_chuan
☀ 學員助教QQ:5604674
☀ Linux技術交流A群(滿):560843
☀ Linux技術交流B群:340829
☀ Linux技術交流C群:463590
☀ Linux技術交流D群:915246
☀ Linux技術交流E群:1663106
☀ Linux技術交流F群:1653851
☀ Linux技術交流G群:2632018(新群,火熱加群中……)
☀ 官方站點:www.linuxprobe.com
☀ 電腦在線閱讀效果更佳:
http://www.linuxprobe.com/chapter-00.html
按住圖片3秒,即可自動關注。
點擊左下角查看更多熱門技術