lamp - 起源php
LAMP這個特定名詞最先出如今1998年。當時,Michael Kunze爲德國計算機雜誌c't寫做的一篇關於自由軟件如何成爲商業軟件替代品的文章時,建立了LAMP這個名詞,用來指代Linux 操做系統、Apache網絡服務器、MySQL 數據庫和PHP (Perl或Python)腳本語言的組合(由四種技術的開頭字母組成)。因爲IT世界衆所周知的對縮寫的愛好,Kunze提出的LAMP這一術語很快就被市場接受。O'Reilly和MySQL AB更是在英語人羣中推廣普及了這個術語。隨之LAMP技術成爲了開源軟件業的一盞真正的明燈。mysql
目前,幾乎在全部的Linux發佈版中都默認包含了「LAMP stack」的產品。這些產品組成了一個強大的Web應用程序平臺。「LAMP stack」中的每個組件都是一個FOSS(免費或者開源軟件/Free or Open Source Software)的實例。FOSS方法的好處有三個方面。第一,FOSS軟件的性質意味着應用程序能夠免費下載,可以讓更普遍的人們不用付費就可使用這個應用軟件。這種免費的方式對於廣大用戶特別具備吸引力。這些用戶若是不使用免費的軟件就須要付費購買「專業」的商用軟件工具。這在製做網站方面一般是一種昂貴的步驟。FOSS許可證是開放式的,所以對於基於FOSS技術的應用軟件的使用和限制都很是少。不須要爲軟件的發佈支付任何許可證費就能夠開發和應用基於LAMP的工程。所以,這對業餘愛好者和專業人員都很是有吸引力。FOSS技術(包括LAMP)的增加和使用的主要緣由是由於用戶可以訪問其資源,修復故障和改善應用軟件的性能都很是容易。與開源軟件許可證結合在一塊兒,這種方法爲許多企業簡化了開發過程,而且爲企業提供了專有軟件或者商業軟件的限制中所沒有的靈活性.linux
lamp - 平臺組成sql
LAMP 平臺由幾個組件組成,呈分層結構。每一層都提供了整個軟件棧的一個關鍵部分:數據庫
Linux和windows:Linux和windows 處在最低層,提供操做系統。其餘每一個組件實際上也在其上運行。可是,並不必定侷限於Linux和windows,若有必要,其餘組件包括: Mac OS X 或 UNIX。apache
Apache:次低層是 Apache,它是一個 Web服務器。Apache 提供可以讓用戶得到 Web 頁面的機制。Apache 是一款穩定的、支持關鍵任務的服務器,Internet 上超過 65% 的網站都使用它做爲 Web 服務器。PHP組件其實是在 Apache 中,動態頁面能夠經過 Apache 和 PHP 建立。編程
MySQL:MySQL 提供 LAMP 系統的數據存儲端。有了 MySQL,即可以得到一個很是強大的、適合運行大型複雜站點的數據庫。在 Web 應用程序中,全部數據、產品、賬戶和其餘類型的信息都存放在這個數據庫中,經過 SQL 語言能夠很容易地查詢這些信息。vim
HP:PHP 是一門簡單而有效的編程語言,它像是粘合劑,能夠將 LAMP 系統全部其餘的組件粘合在一塊兒。您可使用 PHP 編寫能訪問 MySQL 數據庫中的數據和 Linux 提供的一些特性的動態內容。windows
erl:Perl 是一種腳本語言。這表示它並不編譯成可執行程序,而是在運行時進行解釋的一組指令(腳本)。 Perl 是表明「實際抽取和報告語言」(practical extraction and report language) 的字首組合詞。Perl 被譽爲語言中的「瑞士×××」。它功能強大且很是靈活。語言學家 Larry Wall 在廿世紀八十年代後期在 NASA 擔任系統管理員時開發了 Perl。他建立 Perl 的目的是使構建報告的任務變得更簡單。 Perl 如今用來執行許多任務。它也許是用於在 Web 上進行 CGI(公共網關接口)編程最流行的語言。其緣由就是 Perl 是一種功能很是強大的文本處理器,而 Web 編程主要就是文本處理。另外,使用 Perl 一般比使用 C/C++、Java 或 Tcl 更簡單,並且它比 Python 更早出現。Perl被稱爲是一種「膠水語言」。所謂膠水語言,也就是說它是能夠用來將許多元素鏈接在一塊兒的語言。緩存
ython:Python一種交互式面向對象的解釋型編程語言。 Python使用很是清晰的語法實現很是強大的功能。它具備模塊、類、意外處理以及很是高級別的動態數據類型和動態定義。而且,它具備接口和庫函數供多種系統調用。內建模塊還可使用C或C++語言方便地編寫。對於用戶界面的編程,Python一樣可以勝任。 Python能夠運行在Linux 、UNIX、Windows、DOS、OS/二、Mac以及Amiga等等多種環境下。 Python雖然有版權,但徹底能夠無償使用和分發,甚至是爲了商業用途。
lamp - 安裝
早期安裝一個LAMP系統是比較負責的,隨着Linux的普及如今安裝一個LAMP系統變得比較簡單另外許多Linux發行版本(Redhat 、Debian)安裝時能夠自動配置Apache、php、mysql等組件。
lamp - 優化
硬件優化
一、升級硬件的通常規則:對於 PHP 腳本而言,主要的瓶頸是 CPU,對於靜態頁面而言,瓶頸是內存和網絡。一臺 400 Mhz 的普通奔騰機器所下載的靜態頁面就能讓 T3 專線(45Mbps)飽和。
二、採用 hdparm 來優化磁盤,通常能提高 IDE 磁盤讀寫性能 200%,可是對 SCSI 硬盤也有效果。(不一樣類型的硬盤對比)
策略優化
三、Apache 處理 PHP 腳本的速度要比靜態頁面慢 2-10 倍,所以儘可能採用多的靜態頁面,少的腳本。
四、PHP 腳本若是不作緩衝,每次調用都須要編譯,所以,安裝一個 PHP 緩衝產品能提高 25-100% 的性能。
五、若是你採用了 Linux 系統,建議升級內核到 2.4,由於靜態頁面由內核服務。
六、另一項緩衝技術是把不常修改的 PHP 頁面採用 HTML 緩衝輸出。
七、不要在 Web 服務器上運行 X-Windows ,關掉沒有必要運行的進程。
八、若是可以用文本就不要用圖像,儘可能減少圖片的尺寸。
九、分散負載,把數據庫服務器放到另外的機器上去。採用另外低端的機器服務圖片和 HTML 頁面,若是全部的靜態頁面在另一臺服務器上處理,能夠設置 httpd.conf 中的 KeepAlives 爲 off ,來減小斷開鏈接的時間。
十、以上全部的方法都是針對單機而言的,若是你以爲系統仍是不夠快,能夠採用集羣,負載均衡,緩衝技術。採用 Squid 做爲緩衝,配置 Squid 的方法。
編譯優化
十一、把基於文件的會話切換到基於共享內存的會話。編譯 PHP 時採用 --with-mm 選項,在 php.ini 中設置 set session.save_handler=mm 。這個簡單的修改能讓會話管理時間縮短一半。
十二、採用最新版本的 Apache ,並把 PHP 編譯其中,或者採用 DSO 模式,不要採用CGI方式。
1三、編譯 PHP 時,建議採用以下的參數:
--enable-inline-optimization --disable-debug
配置優化
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 設置得太大。
第三方軟件優化
1八、若是喜歡從修改 Apache 源碼入手,能夠安裝 lingerd。在頁面產生和發送後,每一個 Apache 進程都會浪費一段時光在客戶鏈接上,Lingerd 能接管這項工做,讓 Apache 迅速服務下一個客戶請求。
1九、若是你足夠勇敢的話,還能夠採用 Silicon Graphics 的 Accelerated Apache 補丁。這個工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。
安裝一個 PHP 緩衝產品能提高 25-100% 的性能。
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守護進程。
PHP,Perl 或 Python
PHP 是一種編程語言最初設計生產動態網站。PHP 是主要用於服務器端的應用程序軟件。Perl 和 Python 相似。
來源歷史 Michael Kunze在一篇爲德國電腦雜誌c't(1998,第12期,230頁)而寫的文章中使用了縮略語LAMP。這篇文章意在展現一系列的自由軟件成爲了商業包的替換物。因爲IT世界衆所周知的對縮寫的愛好,Kunze提出LAMP這一容易被市場接受的術語來普及自由軟件的使用。
舉例來講,Wikipedia,免費自由的百科全書,運行的一系列軟件具備LAMP環境同樣的特色。Wikipedia使用MediaWiki軟件,主要在Linux下開發,由Apache HTTP服務器提供內容,在MySQL數據庫中存儲內容,PHP來實現程序邏輯。
拷貝文件到/root目錄下
解壓縮文件到/usr/local/目錄下
[root@dde200 mysql-5.5.15-linux2.6-i686]# tar -zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/
[root@dde200 mysql-5.5.15-linux2.6-i686]# less INSTALL-BINARY
根據下面步驟安裝:
指明庫文件:
指明頭文件:
http:
解壓縮文件:
切換到/usr/local/src/httpd-2.2.19目錄下
打開INSTALL 按如下步驟安裝:
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --with-z
執行make make install
指明庫文件:
指明頭文件:
測試:
Php:
解壓縮文件:
[root@dde200 ~]# tar -jvxf php-5.3.7.tar.bz2 -C /usr/local/src/
切換目錄/usr/local/php-5.3..7
打開INSTALL
按如下步驟執行:
執行 make make install
測試與php的關聯:
[root@dde200 htdocs]# vim index.php
測試與mysql的關聯: