這篇文章是講web服務(wù)器方面的性能調(diào)整. 不包括數(shù)據(jù)庫性能的調(diào)整. 這個web服務(wù)器運行在一個EC2 t1.micro 環(huán)境.我選擇 Nginx + PHP5-FPM 來運行php頁面,出于安全考慮我使用SSL. 我使用Blitz.io來進行壓力和性能測試. 下面的是我壓力測試的命令. 功能是在60秒內(nèi)逐漸增加用戶. 在整個過程中,Blitz.io 每秒創(chuàng)建一個請求并增加4個用戶(rise/run = 260/60). 復制代碼 代碼如下: -p 1-250:60 https://
詳細的解釋 對于愛好者來說,這里是詳細的解釋。我將會在下述章節(jié)帶領(lǐng)你重溫我的思考過程。 嘗試 #1: 增強硬件 對于改善性能,我本能的想法是增強服務(wù)器硬件,希望一切都會正常工作。我將EC2實例從t1.micro升級到了c1.medium(針對高流量服務(wù)器進行了優(yōu)化,而不是通用服務(wù)器)。 在此之后,我運行了Blitz.io負載測試。這是結(jié)果的截圖 服務(wù)器的峰值性能可以達到每秒50個成功命中。隨著負載的繼續(xù)增加,超時的數(shù)量上升,而命中的數(shù)量下降。 嘗試 #2: 評效CPU性能 我重新執(zhí)行了測試,同時在后臺運行htop。我注意到兩個CPU的利用率不超過13%。內(nèi)存使用了300Mb。看起來服務(wù)器沒有充分利用。所以我做了下述改變。我編輯了/etc/ngnix/nginx.conf 復制代碼 代碼如下: worker_processes 2;
嘗試 #3, #4, #5: 微調(diào) Nginx + PHP5-FPM 在下述嘗試中,我改變了下述值,仍然獲得跟嘗試 #1同樣的結(jié)果。 嘗試 #3 復制代碼 代碼如下: /etc/ngnix/nginx.conf
worker_processes 2; _________
嘗試 #4 復制代碼 代碼如下: /etc/ngnix/nginx.conf
worker_processes 2; gzip_min_length 1000; ________
嘗試 #5 復制代碼 代碼如下: /etc/php5/fpm/pool.d/www.conf
pm.max_children = 160
嘗試 #6: 部署另外一臺服務(wù)器
這是我使用Blitz.io進行壓力測試的命令 復制代碼 代碼如下: -p 1-250:60 http://labs.
這是結(jié)果: Linode服務(wù)器非常棒!我在想“Linode比EC2好么?”。在我決定沿著這條思路走下去,將代碼遷移到Linode之前,我想要確保兩臺服務(wù)器之間沒有差別。
我搜索了一下,發(fā)現(xiàn)Nginx有些SSL相關(guān)的問題。默認Nginx使用DHE算法創(chuàng)建密碼(cipher)。禁用該算法將會提升性能。 所有我編輯/etc/nginx/nginx.conf去掉了kEDH密碼算法。 復制代碼 代碼如下: worker_processes 2; events { worker_connections 1024; } http { gzip on; gzip_disable "msie6";
gzip_min_length 1000;
我重現(xiàn)執(zhí)行了原來的壓力測試: 復制代碼 代碼如下: -p 1-250:60 https://
這是結(jié)果: 真的有效!?。?! 嘗試 #8: 我真的需要增強硬件 太棒了,EC2與Linode在性能上很接近。但是我真的需要c1.medium實例來獲得這種性能么?可能不需要... 所以我將EC2的實例類型改回了t1.micro。 I因為micro實例只有一個CPU,所有我在/etc/nginx/nginx.conf中減少了worker_processes。 復制代碼 代碼如下: worker_processes 1; ...
這是結(jié)果: 嗯,額外的硬件是有幫助的。 想要在使用了SSL的Nginx服務(wù)器上獲得最好的性能,如下操作:
復制代碼 代碼如下: ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
|
|
來自: WindySky > 《站點相關(guān)》