網(wǎng)站開(kāi)得慢嗎?網(wǎng)站服務(wù)器性能改進(jìn)方法摘要
在這個(gè)快節(jié)奏的時(shí)代,如果您單擊一個(gè)網(wǎng)站并希望簽入,但是該網(wǎng)站打開(kāi)速度太慢,那么許多人應(yīng)該選擇關(guān)閉該網(wǎng)站并轉(zhuǎn)到其他住所。網(wǎng)站緩慢的開(kāi)放速度不僅會(huì)造成流量損失,還會(huì)影響網(wǎng)站SEO優(yōu)化的效果。面對(duì)這樣的情況,我們有什么解決方案?
優(yōu)化思路分析
為了優(yōu)化Web服務(wù)器的性能,讓我們首先看一下Web服務(wù)器在網(wǎng)頁(yè)處理中的步驟:
1. Web瀏覽器將網(wǎng)頁(yè)請(qǐng)求發(fā)送到特定服務(wù)器;
2. Web服務(wù)器收到網(wǎng)頁(yè)請(qǐng)求后,搜索請(qǐng)求的網(wǎng)頁(yè),并將請(qǐng)求的網(wǎng)頁(yè)發(fā)送給Web瀏覽器;
3. Web瀏覽器接收請(qǐng)求的網(wǎng)頁(yè)內(nèi)容并顯示。
以上三個(gè)步驟都與Web服務(wù)器有關(guān),但是實(shí)際的Web服務(wù)器性能與步驟2最相關(guān),在該步驟中,Web服務(wù)器需要查找瀏覽器請(qǐng)求的網(wǎng)頁(yè)內(nèi)容。
我們知道網(wǎng)頁(yè)內(nèi)容可以是靜態(tài)的,也可以是動(dòng)態(tài)的靜態(tài)內(nèi)容。 Web服務(wù)器可以將結(jié)果直接發(fā)送回瀏覽器。對(duì)于動(dòng)態(tài)內(nèi)容,通常需要將其移交給應(yīng)用程序服務(wù)器進(jìn)行處理,然后應(yīng)用程序服務(wù)器返回結(jié)果。
當(dāng)然,也有可以處理動(dòng)態(tài)內(nèi)容的Web服務(wù)器。例如,IIS可以自我解釋和處理ASP,ASP.NET,這是Microsoft的兩種動(dòng)態(tài)Web腳本語(yǔ)言。
從上面的簡(jiǎn)要分析中,我們可以大致得出結(jié)論,有幾個(gè)因素會(huì)影響Web頁(yè)面的訪問(wèn):
1. Web服務(wù)器從磁盤(pán)讀取靜態(tài)頁(yè)面內(nèi)容的速度,即時(shí)間;
2. Web服務(wù)器確定所請(qǐng)求的內(nèi)容是靜態(tài)還是動(dòng)態(tài)的時(shí)間;
3. Web服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用程序服務(wù)器的時(shí)間;
4.應(yīng)用服務(wù)器處理(解釋)動(dòng)態(tài)內(nèi)容所需的時(shí)間;
5. Web服務(wù)器向?yàn)g覽器返回Web內(nèi)容的響應(yīng)時(shí)間;
6. Web服務(wù)器從瀏覽器接收請(qǐng)求的處理性能;
7. Web訪問(wèn)請(qǐng)求在網(wǎng)絡(luò)上的數(shù)據(jù)傳輸時(shí)間:包括從瀏覽器到服務(wù)器,以及從服務(wù)器到瀏覽器;
8.瀏覽器在本地計(jì)算和呈現(xiàn)Web內(nèi)容的時(shí)間,即接收內(nèi)容后顯示內(nèi)容的時(shí)間。
上面的8個(gè)項(xiàng)目簡(jiǎn)單易懂。實(shí)際上,以下各項(xiàng)也與網(wǎng)頁(yè)訪問(wèn)速度的體驗(yàn)有關(guān)。你能考慮一下嗎?還是會(huì)影響頁(yè)面訪問(wèn)性能。
Web服務(wù)器執(zhí)行安全策略檢查的時(shí)間或性能;
Web服務(wù)器讀取日志文件,寫(xiě)入日志內(nèi)容并關(guān)閉對(duì)日志文件的訪問(wèn),然后進(jìn)行讀寫(xiě)然后關(guān)閉的時(shí)間。這三個(gè)步驟中的讀取和寫(xiě)入操作還涉及磁盤(pán)訪問(wèn)性能因素。
同時(shí)連接到Web服務(wù)器的客戶端數(shù),即并發(fā)訪問(wèn)量。
我們總共可以提取上述11個(gè)影響因素,則為:
1. Web服務(wù)器磁盤(pán)性能;
2. Web服務(wù)器與應(yīng)用程序服務(wù)器之間的交互性能;
3.應(yīng)用服務(wù)器處理動(dòng)態(tài)內(nèi)容的性能,或動(dòng)態(tài)內(nèi)容應(yīng)用的處理性能;
4.客戶端與Web服務(wù)器之間的連接速度,即網(wǎng)絡(luò)傳輸性能;
5. Web瀏覽器解釋和呈現(xiàn)Web內(nèi)容的性能;
6. Web訪問(wèn)并發(fā)性能。
為了反映我們的性能優(yōu)化,我們可以從以下幾點(diǎn)開(kāi)始:
1.增加帶寬,包括服務(wù)器和客戶端上的Internet連接帶寬;
2.加快動(dòng)態(tài)內(nèi)容的處理性能;
3.使用盡可能多的靜態(tài)內(nèi)容,以便Web服務(wù)器可以直接將Web內(nèi)容發(fā)送到瀏覽器,而無(wú)需請(qǐng)求應(yīng)用程序服務(wù)器。以下是一些可能的解決方案:
動(dòng)態(tài)內(nèi)容緩存
動(dòng)態(tài)內(nèi)容靜態(tài)
4.多個(gè)服務(wù)器的負(fù)載平衡可同時(shí)處理大量并發(fā)訪問(wèn);
5.提高服務(wù)器磁盤(pán)訪問(wèn)性能,也稱為I / O性能;
6.減少網(wǎng)頁(yè)中HTTP請(qǐng)求的數(shù)量;
7.更換性能更好的Web服務(wù)器;
8.合理部署服務(wù)器。實(shí)踐證明,將服務(wù)器部署在靠近客戶端的位置可以顯著提高訪問(wèn)性能。
性能優(yōu)化實(shí)踐
經(jīng)過(guò)上一節(jié)的簡(jiǎn)要分析后,我相信您對(duì)優(yōu)化Web服務(wù)器有一定的想法。您可以從硬件級(jí)別,軟件級(jí)別和Web代碼級(jí)別進(jìn)行優(yōu)化。
讓我們用一個(gè)具體的例子來(lái)實(shí)踐它。本文中的示例是一個(gè)小型網(wǎng)站。假設(shè)一些數(shù)據(jù)。如果它們相似,則它們純屬巧合,僅作為參考。在實(shí)際工作中,如果遇到大型站點(diǎn),可以參考此處的分析來(lái)修改優(yōu)化計(jì)劃。
1.網(wǎng)站介紹
使用Discuz構(gòu)建的社區(qū)論壇站點(diǎn)!論壇程序,由主流的PHP + MySQL組成。
該網(wǎng)站目前有近50,000個(gè)注冊(cè)用戶,其中絕大多數(shù)是國(guó)內(nèi)用戶。活動(dòng)用戶數(shù)量約為一半,平均每日PV為150,000至200,000,獨(dú)立訪問(wèn)IP數(shù)量約為8000。
2. Web服務(wù)器性能優(yōu)化需求
該網(wǎng)站目前部署在國(guó)外的服務(wù)器上,并由虛擬主機(jī)租用進(jìn)行運(yùn)營(yíng)。由于訪問(wèn)量很大,因此通常會(huì)收到來(lái)自虛擬主機(jī)服務(wù)提供商的大量流量的通知,并且需要進(jìn)行受控訪問(wèn)。
另外,之所以在美國(guó)不租用虛擬主機(jī)的服務(wù)器,是因?yàn)閲?guó)內(nèi)網(wǎng)站的歸檔非常繁瑣。在網(wǎng)站開(kāi)始運(yùn)作時(shí),數(shù)據(jù)量和訪問(wèn)量相對(duì)較小,因此對(duì)性能的要求不高,并且數(shù)據(jù)量較小,因此服務(wù)器在查詢和處理數(shù)據(jù)時(shí)速度更快,這也使得人們覺(jué)得訪問(wèn)速度并不慢?,F(xiàn)在,隨著數(shù)據(jù)量和訪問(wèn)量的不斷增加,訪問(wèn)速度已大大降低,現(xiàn)在是時(shí)候提高訪問(wèn)性能了。
根據(jù)社區(qū)網(wǎng)站的現(xiàn)狀,提出的優(yōu)化要求是家庭訪問(wèn)速度需要加倍,當(dāng)前的網(wǎng)頁(yè)加載時(shí)間需要40秒左右。我希望優(yōu)化可以在20秒內(nèi)加載首頁(yè)。
另外,建議每天可以自動(dòng)備份一次網(wǎng)站數(shù)據(jù),并將備份數(shù)據(jù)保存一個(gè)月,以便隨時(shí)恢復(fù)。
在以上兩個(gè)要求中,第一個(gè)是性能優(yōu)化要求,第二個(gè)是附加要求。
3.性能優(yōu)化計(jì)劃
根據(jù)網(wǎng)站的現(xiàn)狀和優(yōu)化需求,結(jié)合自身的經(jīng)驗(yàn)以及Google的搜索,并不斷與網(wǎng)站所有者進(jìn)行確認(rèn)和溝通,最終得出了最終的性能優(yōu)化計(jì)劃:
從虛擬主機(jī)部署更改為獨(dú)立服務(wù)器部署
虛擬主機(jī)有很多限制。您不能自己配置Web服務(wù)器和PHP動(dòng)態(tài)緩存。而且,獨(dú)立服務(wù)器可以享受專有的內(nèi)存和處理器資源,并且不再受虛擬主機(jī)供應(yīng)商的每個(gè)虛擬主機(jī)用戶的內(nèi)存和處理器的約束。資源占用限制。處理器資源和內(nèi)存資源對(duì)接受更多并發(fā)訪問(wèn)具有直接的性能改善效果。
從Windows操作系統(tǒng)更改為L(zhǎng)inux操作系統(tǒng)
該網(wǎng)站使用PHP + MySQL程序。 Windows下PHP的性能受到IIS的限制。需要通過(guò)ISAPI調(diào)用PHP,因此在Linux下性能不如Apache。 PHP是通過(guò)PHP模塊直接解釋的,它不如Nginx和PHP-FPM的性能好。由于使用了單獨(dú)的服務(wù)器,因此操作系統(tǒng)也可以由我們自己確定。對(duì)于Linux系統(tǒng),我們選擇了熟悉的Ubuntu Linux Server 10.04(一年前為12.04)^-^。
Web服務(wù)器使用Nginx代替Apache
選擇Nginx代替Apache的原因非常簡(jiǎn)單明了,因?yàn)檎军c(diǎn)上有許多靜態(tài)附件文件,并且Nginx在處理靜態(tài)內(nèi)容方面的性能幾乎是Apache的10倍。
在PHP解釋和偽靜態(tài)規(guī)則方面,Apache比Nginx更強(qiáng)大,但這并不影響我們放棄它。為了減輕這種情況,我們稍后會(huì)動(dòng)態(tài)緩存PHP。
要?jiǎng)討B(tài)緩存PHP查詢,請(qǐng)使用eAccelerator作為加速器
PHP加速器是為了提高PHP執(zhí)行效率,以緩存PHP操作碼,從而使后續(xù)的PHP執(zhí)行不需要解析和轉(zhuǎn)換,而可以直接調(diào)用PHP操作碼,從而大大提高了速度。 。
eAccelerator是一個(gè)開(kāi)放源代碼PHP加速器,用于優(yōu)化和緩存動(dòng)態(tài)內(nèi)容。它提高了PHP腳本的緩存性能,使PHP腳本幾乎完全消除了編譯時(shí)的服務(wù)器開(kāi)銷。它還優(yōu)化了腳本以提高其執(zhí)行效率。 PHP程序代碼的執(zhí)行效率可以提高1-10倍,這種加速仍然非常明顯。
具體來(lái)說(shuō),我們計(jì)劃為eAccelerator優(yōu)化以下設(shè)置:
緩存是使用物理內(nèi)存執(zhí)行的,沒(méi)有磁盤(pán)用于緩存。我們知道內(nèi)存的讀寫(xiě)性能是硬盤(pán)的N倍,因此,在可以安排內(nèi)存資源時(shí),強(qiáng)烈建議使用內(nèi)存來(lái)保存eAccelerator的緩存內(nèi)容。
緩存大小設(shè)置為32MB,這是默認(rèn)情況下操作系統(tǒng)支持的最大緩存容量。盡管可以通過(guò)修改配置文件來(lái)增加該值,但我們認(rèn)為這是不必要的,因此我們放棄了。
Nginx性能優(yōu)化
已選擇Nginx。盡管它的性能非常好,但是我們?nèi)匀恍枰獌?yōu)化其性能。在這種情況下,我們進(jìn)行了以下優(yōu)化:
使用8個(gè)進(jìn)程,每個(gè)進(jìn)程需要大約20M的內(nèi)存消耗,這里總共使用了大約150M的內(nèi)存。
充分利用主服務(wù)器的CPU核心:
四個(gè)核心使用CPU粘性配置選項(xiàng)(worker_cpu_affinity),為每個(gè)核心處理器分配了兩個(gè)進(jìn)程。
打開(kāi)gzip壓縮:
gzip壓縮非常適合JS,CSS,XML壓縮,它可以壓縮一半,即將傳輸時(shí)間減少一倍;
對(duì)于圖像文件,JPG已被壓縮,其壓縮性能較差。
圖片在本地緩存了1天:
網(wǎng)站上有很多圖片。通常,圖像在上傳后不會(huì)被頻繁修改,而只會(huì)被頻繁訪問(wèn)。因此,將圖像放置在Nginx緩存中可以減少服務(wù)器訪問(wèn)負(fù)載的數(shù)量并提高訪問(wèn)速度。
JS,CSS文件在本地緩存7天:
這兩種網(wǎng)頁(yè)文件不會(huì)正常修改并緩存,這可以減少加載次數(shù)并提高訪問(wèn)速度。
為什么這兩個(gè)文件沒(méi)有與圖片一起設(shè)置緩存有效期,是因?yàn)榭紤]到不同文件的修改頻率不同。
Nginx日志每天被切割一次:
這種優(yōu)化可以大大減少Nginx日志文件的大小。查看一周后,每日日志文件約為50M。如果不是每天都削減,而是按月削減,那么該月的日志文件就是幾G。當(dāng)在內(nèi)存中加載如此大的文件時(shí),系統(tǒng)本身沒(méi)有足夠的內(nèi)存,因此自然會(huì)使用磁盤(pán)進(jìn)行緩存,這會(huì)影響性能。
每天大約有50M,可以將其平穩(wěn)地加載到內(nèi)存中,以便Nginx在處理訪問(wèn)時(shí)可以快速保存訪問(wèn)日志。
經(jīng)過(guò)上述優(yōu)化項(xiàng)目,Nginx總共需要約200M的內(nèi)存資源。
優(yōu)化PHP CGI流程的性能
Nginx沒(méi)有PHP模塊,因此它對(duì)PHP的支持是通過(guò)PHP-FPM實(shí)現(xiàn)的。 PHP-FPM運(yùn)行進(jìn)程來(lái)處理并發(fā)請(qǐng)求。在這種情況下,我們配置了20個(gè)進(jìn)程,每個(gè)進(jìn)程占用約20M的內(nèi)存資源,總計(jì)約400M。
同時(shí),PHP-FPM和Nginx之間的交互機(jī)制選擇Linux Socket模式而不是TCP協(xié)議端口,Socks是系統(tǒng)級(jí)處理模式,Socks是文件連接,TCP協(xié)議端口需要通過(guò)網(wǎng)絡(luò)協(xié)議進(jìn)行處理,其性能不如前者。我們選擇了前者。
MySQL數(shù)據(jù)庫(kù)性能優(yōu)化
因?yàn)榫W(wǎng)站的主程序是別人開(kāi)發(fā)的開(kāi)源程序,所以我們無(wú)法處理數(shù)據(jù)庫(kù)查詢程序的優(yōu)化,只能從MySQL本身中找到突破。
我們可以想象,對(duì)于論壇網(wǎng)站,發(fā)布和檢查帖子的訪問(wèn)次數(shù)遠(yuǎn)大于創(chuàng)建帖子和回復(fù)帖子的訪問(wèn)次數(shù)。它反映在MySQL數(shù)據(jù)庫(kù)中,即讀取和查詢表數(shù)據(jù)的連接處理更多。
因此,我們必須選擇在讀取表和查詢方面具有更好性能的存儲(chǔ)引擎。結(jié)合先前的知識(shí),MySQL的默認(rèn)MyISAM引擎旨在處理讀取頻率遠(yuǎn)大于寫(xiě)入頻率的環(huán)境。查詢效率相當(dāng)高,內(nèi)存占用很少,這也與我們以低內(nèi)存配置租用的VPS一致。
特定于MySQL配置參數(shù)的優(yōu)化,由于服務(wù)器本身的內(nèi)存資源有限,因此直接使用默認(rèn)的中型環(huán)境配置文件。
內(nèi)容分發(fā)網(wǎng)絡(luò)應(yīng)用
該站點(diǎn)每天有超過(guò)100,000次訪問(wèn),數(shù)以萬(wàn)計(jì)的獨(dú)立IP訪問(wèn),查看以前的訪問(wèn)統(tǒng)計(jì)數(shù)據(jù),來(lái)自該國(guó)各個(gè)地區(qū)的訪問(wèn),使用各種網(wǎng)絡(luò)連接進(jìn)行訪問(wèn),以確保用戶從每個(gè)網(wǎng)絡(luò),并減少網(wǎng)站服務(wù)器的數(shù)量,我們使用CDN分發(fā)靜態(tài)內(nèi)容,以便各地的用戶都可以訪問(wèn)已緩存在CDN上的文件。首次訪問(wèn)靜態(tài)內(nèi)容時(shí),CDN服務(wù)提供商會(huì)將靜態(tài)內(nèi)容緩存在全國(guó)的服務(wù)器上。在第二次訪問(wèn)期間,用戶實(shí)際上并沒(méi)有連接到網(wǎng)站服務(wù)器來(lái)獲取文件,而是直接從CDN服務(wù)器獲取文件,這可以顯著提高網(wǎng)站性能。
希望云網(wǎng)時(shí)代小編的分享能幫助到大家,云網(wǎng)時(shí)代專注IDC14年,為廣大用戶提供專業(yè)化深圳服務(wù)器托管,深圳服務(wù)器租用,深圳主機(jī)托管,云服務(wù)器租用,香港主機(jī)租用等服務(wù)器資源,詳情歡迎咨詢客服了解。