- 論壇徽章:
- 0
|
對(duì)于訪問(wèn)量稍大的站點(diǎn),Apache的這些默認(rèn)配置是無(wú)法滿足需求的,我們?nèi)孕枵{(diào)整Apache的一些參數(shù),使Apache能夠在大訪問(wèn)量環(huán)境下發(fā)揮出更好的性能。以下我們對(duì)Apache配置文件httpd.conf中對(duì)性能影響較大的參數(shù)進(jìn)行一些說(shuō)明。
(1) Timeout 該參數(shù)指定Apache在接收請(qǐng)求或發(fā)送所請(qǐng)求內(nèi)容之前的最長(zhǎng)等待時(shí)間(秒),若超過(guò)該時(shí)間Apache則放棄處理該請(qǐng)求,并釋放連接。該參數(shù)默認(rèn)值為120,推薦設(shè)置為60,對(duì)于訪問(wèn)量較大的網(wǎng)站可以設(shè)置為30。
(2) KeepAlive 該參數(shù)控制Apache是否允許在一個(gè)連接中有多個(gè)請(qǐng)求,默認(rèn)打開(kāi)。但對(duì)于大多數(shù)論壇類型站點(diǎn)來(lái)說(shuō),通常設(shè)置為off以關(guān)閉該支持。
(3) MPM – prefork.c 在默認(rèn)情況下Apache使用Prefork(進(jìn)程)工作模式,可以說(shuō)這部分的參數(shù)設(shè)置是對(duì)Apache性能影響的核心和關(guān)鍵。用戶可以在配置文檔中找到以下配置段:
1. <IfModule prefork.c>
2. StartServers 5
3. MinSpareServers 5
4. MaxSpareServers 10
5. MaxClients 15
6. MaxRequestsPerChild 0
7. </IfModule>
對(duì)于訪問(wèn)量稍大的站點(diǎn),Apache的這些默認(rèn)配置是無(wú)法滿足需求的,我們?nèi)孕枵{(diào)整Apache的一些參數(shù),使Apache能夠在大訪問(wèn)量環(huán)境下發(fā)揮出更好的性能。以下我們對(duì)Apache配置文件httpd.conf中對(duì)性能影響較大的參數(shù)進(jìn)行一些說(shuō)明。
(1) Timeout 該參數(shù)指定Apache在接收請(qǐng)求或發(fā)送所請(qǐng)求內(nèi)容之前的最長(zhǎng)等待時(shí)間(秒),若超過(guò)該時(shí)間Apache則放棄處理該請(qǐng)求,并釋放連接。該參數(shù)默認(rèn)值為120,推薦設(shè)置為60,對(duì)于訪問(wèn)量較大的網(wǎng)站可以設(shè)置為30。
(2) KeepAlive 該參數(shù)控制Apache是否允許在一個(gè)連接中有多個(gè)請(qǐng)求,默認(rèn)打開(kāi)。但對(duì)于大多數(shù)論壇類型站點(diǎn)來(lái)說(shuō),通常設(shè)置為off以關(guān)閉該支持。
(3) MPM – prefork.c 在默認(rèn)情況下Apache使用Prefork(進(jìn)程)工作模式,可以說(shuō)這部分的參數(shù)設(shè)置是對(duì)Apache性能影響的核心和關(guān)鍵。用戶可以在配置文檔中找到以下配置段:
1. <IfModule prefork.c>
2. StartServers 5
3. MinSpareServers 5
4. MaxSpareServers 10
5. MaxClients 15
6. MaxRequestsPerChild 0
7. </IfModule>
這就是控制Apache進(jìn)程工作的配置段,為了更好的理解上述配置中的各項(xiàng)參數(shù), 下面讓我們先了解一下Apache是如何控制進(jìn)程工作的。我們知道,在 Unix系統(tǒng)中,很多服務(wù)(Service)的守護(hù)進(jìn)程(Daemon)在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)進(jìn)程以準(zhǔn)備應(yīng)答可能的連接請(qǐng)求,服務(wù)即進(jìn)入了端口監(jiān)聽(tīng)狀態(tài),當(dāng) 一個(gè)來(lái)自客戶端(Client)的請(qǐng)求被發(fā)送至服務(wù)所監(jiān)聽(tīng)的端口時(shí),該服務(wù)進(jìn)程即會(huì)處理該請(qǐng)求,在處理過(guò)程中,該進(jìn)程處于獨(dú)占狀態(tài),也就是說(shuō)如果此時(shí)有其 他請(qǐng)求到達(dá),這些請(qǐng)求只能“排隊(duì)”等待當(dāng)前請(qǐng)求處理完成且服務(wù)進(jìn)程釋放。這樣就會(huì)導(dǎo)致越來(lái)越多的請(qǐng)求處于隊(duì)列等待狀態(tài),實(shí)際表現(xiàn)就是該服務(wù)處理能力非常低 下。Apache使用Prefork模式很好的解決了這一問(wèn)題。下面我們來(lái)看看Apache實(shí)際上是如何高效率工作的。
當(dāng)Apache啟動(dòng)時(shí),Apache會(huì)啟動(dòng)StartSpareServers個(gè) 空閑進(jìn)程同時(shí)準(zhǔn)備接收處理請(qǐng)求,當(dāng)多個(gè)請(qǐng)求到來(lái)時(shí),StarSpareServers進(jìn)行會(huì)越來(lái)越少,當(dāng)空閑進(jìn)程減少到MinSpareServers個(gè) 時(shí),Apache為了能夠繼續(xù)有充裕的進(jìn)程處理請(qǐng)求,它會(huì)再啟動(dòng)StartsServers個(gè)進(jìn)程備用,這樣就大大減少了請(qǐng)求隊(duì)列等待的可能,使得服務(wù)效 率提高,這也是為什么叫做Pre-fork的原因;讓我們繼續(xù)跟蹤Apache的工作,我們假設(shè)Apache已經(jīng)啟動(dòng)了200個(gè)進(jìn)程來(lái)處理請(qǐng)求,理論上來(lái) 說(shuō),此時(shí)Apache一共有205個(gè)進(jìn)程,而過(guò)了一段時(shí)間,假設(shè)有100個(gè)請(qǐng)求都得到了Apache的響應(yīng)和處理,那么此時(shí)這100個(gè)進(jìn)程就被釋放成為空 閑進(jìn)程,那么此時(shí)Apache有105個(gè)空閑進(jìn)程。而對(duì)于服務(wù)而言,啟動(dòng)太多的空閑進(jìn)程時(shí)沒(méi)有任何意義的,反而會(huì)降低服務(wù)器的整體性能,那么Apache 真的會(huì)有105個(gè)空閑進(jìn)程么?當(dāng)然不會(huì)!實(shí)際上 Apache隨時(shí)在檢查自己,當(dāng)發(fā)現(xiàn)有超過(guò)MaxSpareServers個(gè)空閑進(jìn)程時(shí),則會(huì)自動(dòng)停止關(guān)閉一些進(jìn)程,以保證空閑進(jìn)程不過(guò)過(guò)多。說(shuō)到這里, 用戶應(yīng)該對(duì)Apache的工作方式有了一定的了解,如果想獲得更多更詳細(xì)的說(shuō)明請(qǐng)參閱Apache手冊(cè)文檔。
我們還有兩個(gè)參數(shù)沒(méi)有介紹:MaxClients和 MaxRequestPerchild;MaxClients指定Apache在同一時(shí)間內(nèi)最多允許有多少客戶端能夠與其連接,如果超過(guò) MaxClients個(gè)連接,客戶端將會(huì)得到一個(gè)“服務(wù)器繁忙”的錯(cuò)誤頁(yè)面。我們看到默認(rèn)情況下MaxClients設(shè)置為15,這對(duì)一些中型站點(diǎn)和大型 站點(diǎn)顯然是遠(yuǎn)遠(yuǎn)不夠的!也許您需要同時(shí)允許512個(gè)客戶端連接才能滿足應(yīng)用需求,好吧,那么就讓我們把 MaxClients修改為512,保存httpd.conf并退出,重啟Apache,很遺憾,在重啟過(guò)程當(dāng)中您看到了一些錯(cuò)誤提示,Apache重啟 失敗。錯(cuò)誤提示中告訴您MaxClients最大只能設(shè)定為256,相信您一定很失望。不過(guò)不要沮喪,Apache作為世界一流的Web Server一定不會(huì)如此單薄的!在默認(rèn)情況下,MaxClients的確只能設(shè)定為不超過(guò)256的整數(shù),但是,如果您有需要完全可以隨意定制,此時(shí)就需 要使用ServerLimit參數(shù)來(lái)配合使用,簡(jiǎn)單的說(shuō)ServerLimit就像是水桶,而MaxClients就像是水,您可以通過(guò)更換更大的水桶 (將ServerLimit設(shè)定為一個(gè)較大值)來(lái)容納更多的水(MaxClients),但要注意,MaxClients的設(shè)定數(shù)值是不能大于 ServerLimit的設(shè)定數(shù)值的!
下面讓我們了解一下MaxRequestPerChild參數(shù),該參數(shù)指定一個(gè)連 接進(jìn)程中可以有多少個(gè)線程同時(shí)工作。也許這樣解釋過(guò)于專業(yè),那么您只要想想“網(wǎng)絡(luò)螞蟻”、“網(wǎng)際快車(chē)FlashGet”中的“多點(diǎn)同時(shí)下載”即可,該參數(shù) 實(shí)際上就是限制最多可以用幾個(gè)“點(diǎn)”,當(dāng)這些“點(diǎn)”用完以后就會(huì)結(jié)束進(jìn)程,并重新開(kāi)啟一個(gè)進(jìn)程。默認(rèn)設(shè)置為0,即為:不限制。但需要注意,如果將該值設(shè)置 的過(guò)小會(huì)引起訪問(wèn)問(wèn)題,如果沒(méi)有特殊需要或者訪問(wèn)量壓力并非很大可以保持默認(rèn)值,如果訪問(wèn)量很大則推薦設(shè)置為2048,一般現(xiàn)在高負(fù)載服務(wù)器設(shè)置 10000也可。
好了,解釋了這么多,讓我們看看經(jīng)過(guò)修改后Perfork.c配置段的推薦配置:
1. <IfModule prefork.c>
2. StartServers 5
3. MinSpareServers 5
4. MaxSpareServers 10
5. ServerLimit 1024
6. MaxClients 768
7. MaxRequestsPerChild 0
8. </IfModule>
完成了上述對(duì)Apache的調(diào)整,Apache已經(jīng)獲得了較大的性能改善。記住,在修改任何參數(shù)后都需要重啟Apache才能生效的。有關(guān)Apache的優(yōu)化遠(yuǎn)遠(yuǎn)不止這些,有興趣的用戶可以閱讀Apache手冊(cè)文檔或者尋找一些文獻(xiàn)資料學(xué)習(xí)。
2. PHP優(yōu)化對(duì)于PHP的優(yōu)化主要是對(duì)php.ini中的相關(guān)主要參數(shù)進(jìn)行合理調(diào)整和設(shè)置,以下我們就來(lái)看看php.ini中的一些對(duì)性能影響較大的參數(shù)應(yīng)該如何設(shè)置。
1. # vi /etc/php.ini
(1) PHP函數(shù)禁用找到:
1. disable_functions =
該選項(xiàng)可以設(shè)置哪些PHP函數(shù)是禁止使用的,PHP中有一些函數(shù)的風(fēng)險(xiǎn)性還是相當(dāng)大的,可以直接執(zhí)行一些系統(tǒng)級(jí)腳本命令,如果允許這些函數(shù)執(zhí)行,當(dāng)PHP程序出現(xiàn)漏洞時(shí),損失是非常嚴(yán)重的!以下我們給出推薦的禁用函數(shù)設(shè)置:
1. disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需注意:如果您的服務(wù)器中含有一些系統(tǒng)狀態(tài)檢測(cè)的PHP程序,則不要禁用shell_exec,proc_open,proc_get_status等函數(shù)。
(2) PHP腳本執(zhí)行時(shí)間找到:
1. max_execution_time = 30
該選項(xiàng)設(shè)定PHP程序的最大執(zhí)行時(shí)間,如果一個(gè)PHP腳本被請(qǐng)求,且該P(yáng)HP腳本 在max_execution_time時(shí)間內(nèi)沒(méi)能執(zhí)行完畢,則PHP不再繼續(xù)執(zhí)行,直接給客戶端返回超時(shí)錯(cuò)誤。沒(méi)有特殊需要該選項(xiàng)可保持默認(rèn)設(shè)置30 秒,如果您的PHP腳本確實(shí)需要長(zhǎng)執(zhí)行時(shí)間則可以適當(dāng)增大該時(shí)間設(shè)置。
(3) PHP腳本處理內(nèi)存占用找到:
1. memory_limit = 8M
該選項(xiàng)指定PHP腳本處理所能占用的最大內(nèi)存,默認(rèn)為8MB,如果您的服務(wù)器內(nèi)存為1GB以上,則該選項(xiàng)可以設(shè)置為12MB以獲得更快的PHP腳本處理效率。
(4) PHP全局函數(shù)聲明找到:
1. register_globals = Off
網(wǎng)絡(luò)上很多關(guān)于PHP設(shè)置的文章都推薦將該選項(xiàng)設(shè)置為On,其實(shí)這是一種及其危險(xiǎn)的設(shè)置方法,很可能引起嚴(yán)重的安全性問(wèn)題。如果沒(méi)有特殊的需要,強(qiáng)烈推薦保留默認(rèn)設(shè)置!
(5) PHP上傳文件大小限制找到:
1. upload_max_filesize = 2M
該選項(xiàng)設(shè)定PHP所能允許最大上傳文件大小,默認(rèn)為2MB。根據(jù)實(shí)際應(yīng)用需求,可以適當(dāng)增大該設(shè)置。
(6) Session存儲(chǔ)介質(zhì)找到:
1. session.save_path
如果你的PHP程序使用Session對(duì)話,則可以將Session存儲(chǔ)位置設(shè)置 為/dev/shm,/dev/shm是Linux系統(tǒng)獨(dú)有的TMPFS 文件系統(tǒng),是以內(nèi)存為主要存儲(chǔ)方式的文件系統(tǒng),比RAMDISK更優(yōu)秀,因?yàn)榭梢允褂肈ISKSWAP作為補(bǔ)充,而且是系統(tǒng)自帶的功能模塊,不需要另行配 置。想想看,從磁盤(pán)IO操作到內(nèi)存操作,速度會(huì)快多少?只是需要注意,存儲(chǔ)在/dev/shm的數(shù)據(jù),在服務(wù)器重啟后會(huì)全部丟失。不過(guò)這對(duì)于 Session來(lái)說(shuō)是無(wú)足輕重的。
http://www.net527.cn/a/caozuoxitong/Linux/2011/1216/20987.html |
|