Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[转]
生活随笔
收集整理的這篇文章主要介紹了
Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[转]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
?Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web服務(wù)器(第6版)[原創(chuàng)]
?大?|?中?|?小? [?2010-3-4 20:10 | by?張宴?] [文章作者:張宴 本文版本:v6.3 最后修改:2010.07.26?轉(zhuǎn)載請注明原文鏈接:http://blog.s135.com/nginx_php_v6/]前言:本文是我撰寫的關(guān)于搭建“Nginx + PHP(FastCGI)”Web服務(wù)器的第6篇文章。本系列文章作為國內(nèi)最早詳細(xì)介紹 Nginx + PHP 安裝、配置、使用的資料之一,為推動 Nginx 在國內(nèi)的發(fā)展產(chǎn)生了積極的作用。本文可能不斷更新小版本,請記住原文鏈接“http://blog.s135.com/nginx_php_v6/”,獲取最新內(nèi)容。第6篇文章主要介紹了Nginx 0.8.x新的平滑重啟方式,將PHP升級到了5.2.14,修正了PEAR問題。另將MySQL 5.1.x升級到了5.5.x系列,配置文件變更較大。
鏈接:《2007年9月的第1版》、《2007年12月的第2版》、《2008年6月的第3版》、《2008年8月的第4版》、《2009年5月的第5版》
Nginx?("engine x") 是一個高性能的 HTTP 和反向代理服務(wù)器,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)的,它已經(jīng)在該站點運行超過三年了。Igor 將源代碼以類BSD許可證的形式發(fā)布。
Nginx 超越 Apache 的高性能和穩(wěn)定性,使得國內(nèi)使用 Nginx 作為 Web 服務(wù)器的網(wǎng)站也越來越多,其中包括新浪博客、新浪播客、網(wǎng)易新聞、騰訊網(wǎng)、搜狐博客等門戶網(wǎng)站頻道,六間房、56.com等視頻分享網(wǎng)站,Discuz!官方論壇、水木社區(qū)等知名論壇,盛大在線、金山逍遙網(wǎng)等網(wǎng)絡(luò)游戲網(wǎng)站,豆瓣、人人網(wǎng)、YUPOO相冊、金山愛詞霸、迅雷在線等新興Web 2.0網(wǎng)站。
Nginx 的官方中文維基:http://wiki.nginx.org/NginxChs
在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯的替代品。Nginx同時也可以作為7層負(fù)載均衡服務(wù)器來使用。根據(jù)我的測試結(jié)果,Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。
根據(jù)我的經(jīng)驗,4GB內(nèi)存的服務(wù)器+Apache(prefork模式)一般只能處理3000個并發(fā)連接,因為它們將占用3GB以上的內(nèi)存,還得為系統(tǒng)預(yù)留1GB的內(nèi)存。我曾經(jīng)就有兩臺Apache服務(wù)器,因為在配置文件中設(shè)置的MaxClients為4000,當(dāng)Apache并發(fā)連接數(shù)達(dá)到3800時,導(dǎo)致服務(wù)器內(nèi)存和Swap空間用滿而崩潰。
而這臺 Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服務(wù)器在3萬并發(fā)連接下,開啟的10個Nginx進(jìn)程消耗150M內(nèi)存(15M*10=150M),開啟的64個php-cgi進(jìn)程消耗1280M內(nèi)存(20M*64=1280M),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB內(nèi)存。如果服務(wù)器內(nèi)存較小,完全可以只開啟25個php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500M。
在3萬并發(fā)連接下,訪問Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服務(wù)器的PHP程序,仍然速度飛快。下圖為Nginx的狀態(tài)監(jiān)控頁面,顯示的活動連接數(shù)為28457(關(guān)于Nginx的監(jiān)控頁配置,會在本文接下來所給出的Nginx配置文件中寫明):
我生產(chǎn)環(huán)境下的兩臺Nginx + PHP5(FastCGI)服務(wù)器,跑多個一般復(fù)雜的純PHP動態(tài)程序,單臺Nginx + PHP5(FastCGI)服務(wù)器跑PHP動態(tài)程序的處理能力已經(jīng)超過“700次請求/秒”,相當(dāng)于每天可以承受6000萬(700*60*60*24=60480000)的訪問量(更多信息見此),而服務(wù)器的系統(tǒng)負(fù)載也不高:
2009年9月3日下午2:30,金山游戲《劍俠情緣網(wǎng)絡(luò)版叁》臨時維護(hù)1小時(http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml),大量玩家上官網(wǎng),論壇、評論、客服等動態(tài)應(yīng)用Nginx服務(wù)器集群,每臺服務(wù)器的Nginx活動連接數(shù)達(dá)到2.8萬,這是筆者遇到的Nginx生產(chǎn)環(huán)境最高并發(fā)值。
下面是用100個并發(fā)連接分別去壓生產(chǎn)環(huán)境中同一負(fù)載均衡器VIP下、提供相同服務(wù)的兩臺服務(wù)器,一臺為Nginx,另一臺為Apache,Nginx每秒處理的請求數(shù)是Apache的兩倍多,Nginx服務(wù)器的系統(tǒng)負(fù)載、CPU使用率遠(yuǎn)低于Apache:
你可以將連接數(shù)開到10000~30000,去壓Nginx和Apache上的phpinfo.php,這是用瀏覽器訪問Nginx上的phpinfo.php一切正常,而訪問Apache服務(wù)器的phpinfo.php,則是該頁無法顯示。4G內(nèi)存的服務(wù)器,即使再優(yōu)化,Apache也很難在“webbench -c 30000 -t 60http://xxx.xxx.xxx.xxx/phpinfo.php”的壓力情況下正常訪問,而調(diào)整參數(shù)優(yōu)化后的Nginx可以。
webbench 下載地址:http://blog.s135.com/post/288/
注意:webbench 做壓力測試時,該軟件自身也會消耗CPU和內(nèi)存資源,為了測試準(zhǔn)確,請將 webbench 安裝在別的服務(wù)器上。
測試結(jié)果:##### Nginx + PHP #####
引用 [root@localhost webbench-1.5]# webbench -c 100 -t 30?http://192.168.1.21/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET?http://192.168.1.21/phpinfo.php
100 clients, running 30 sec.
Speed=102450 pages/min, 16490596 bytes/sec.
Requests: 51225 susceed, 0 failed.
top - 14:06:13 up 27 days,??2:25,??2 users,??load average: 14.57, 9.89, 6.51
Tasks: 287 total,?? 4 running, 283 sleeping,?? 0 stopped,?? 0 zombie
Cpu(s): 49.9% us,??6.7% sy,??0.0% ni, 41.4% id,??1.1% wa,??0.1% hi,??0.8% si
Mem:?? 6230016k total,??2959468k used,??3270548k free,?? 635992k buffers
Swap:??2031608k total,???? 3696k used,??2027912k free,??1231444k cached
測試結(jié)果:#####??Apache + PHP #####
引用 [root@localhost webbench-1.5]# webbench -c 100 -t 30?http://192.168.1.27/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET?http://192.168.1.27/phpinfo.php
100 clients, running 30 sec.
Speed=42184 pages/min, 31512914 bytes/sec.
Requests: 21092 susceed, 0 failed.
top - 14:06:20 up 27 days,??2:13,??2 users,??load average: 62.15, 26.36, 13.42
Tasks: 318 total,?? 7 running, 310 sleeping,?? 0 stopped,?? 1 zombie
Cpu(s): 80.4% us, 10.6% sy,??0.0% ni,??7.9% id,??0.1% wa,??0.1% hi,??0.9% si
Mem:?? 6230016k total,??3075948k used,??3154068k free,?? 379896k buffers
Swap:??2031608k total,????12592k used,??2019016k free,??1117868k cached
為什么Nginx的性能要比Apache高得多?這得益于Nginx使用了最新的epoll(Linux 2.6內(nèi)核)和kqueue(freebsd)網(wǎng)絡(luò)I/O模型,而Apache則使用的是傳統(tǒng)的select模型。目前Linux下能夠承受高并發(fā)訪問的Squid、Memcached都采用的是epoll網(wǎng)絡(luò)I/O模型。
處理大量的連接的讀寫,Apache所采用的select網(wǎng)絡(luò)I/O模型非常低效。下面用一個比喻來解析Apache采用的select模型和Nginx采用的epoll模型進(jìn)行之間的區(qū)別:
假設(shè)你在大學(xué)讀書,住的宿舍樓有很多間房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友挨個房間去找,直到找到你為止。而epoll版宿管大媽會先記下每位同學(xué)的房間號,你的朋友來時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿大樓找人。如果來了10000個人,都要找自己住這棟樓的同學(xué)時,select版和epoll版宿管大媽,誰的效率更高,不言自明。同理,在高并發(fā)服務(wù)器中,輪詢I/O是最耗時間的操作之一,select和epoll的性能誰的性能更高,同樣十分明了。
安裝步驟:
(系統(tǒng)要求:Linux 2.6+ 內(nèi)核,本文中的Linux操作系統(tǒng)為CentOS 5.3,另在RedHat AS4上也安裝成功)
一、獲取相關(guān)開源程序:
1、【適用CentOS操作系統(tǒng)】利用CentOS Linux系統(tǒng)自帶的yum命令安裝、升級所需的程序庫(RedHat等其他Linux發(fā)行版可從安裝光盤中找到這些程序庫的RPM包,進(jìn)行安裝):
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
2、【適用RedHat操作系統(tǒng)】RedHat等其他Linux發(fā)行版可從安裝光盤中找到這些程序庫的RPM包(事先可通過類似“rpm -qa | grep libjpeg”的命令查看所需的RPM包是否存在,通常是“xxx-devel”不存在,需要安裝)。RedHat可以直接利用CentOS的RPM包安裝,以下是RPM包下載網(wǎng)址:
①、RedHat AS4 & CentOS 4
http://mirrors.163.com/centos/4/os/i386/CentOS/RPMS/
http://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/
②、RedHat AS5 & CentOS 5
http://mirrors.163.com/centos/5/os/i386/CentOS/
http://mirrors.163.com/centos/5/os/x86_64/CentOS/
③、RPM包搜索網(wǎng)站
http://rpm.pbone.net/
http://www.rpmfind.net/
④、RedHat AS4 系統(tǒng)環(huán)境,通常情況下缺少的支持包安裝:
Ⅰ、i386 系統(tǒng)
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libjpeg-devel-6b-33.i386.rpm
rpm -ivh libjpeg-devel-6b-33.i386.rpm
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/i386/freetype-devel-2.1.9-1.i386.rpm
rpm -ivh freetype-devel-2.1.9-1.i386.rpm
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libpng-devel-1.2.7-1.i386.rpm
rpm -ivh libpng-devel-1.2.7-1.i386.rpm
Ⅱ、x86_64 系統(tǒng)
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libjpeg-devel-6b-33.x86_64.rpm
rpm -ivh libjpeg-devel-6b-33.x86_64.rpm
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/freetype-devel-2.1.9-1.x86_64.rpm
rpm -ivh freetype-devel-2.1.9-1.x86_64.rpm
wget?http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libpng-devel-1.2.7-1.x86_64.rpm
rpm -ivh libpng-devel-1.2.7-1.x86_64.rpm
3、【適用CentOS、RedHat及其它Linux操作系統(tǒng)】下載程序源碼包:
本文中提到的所有開源軟件為截止到2010年07月26日的最新穩(wěn)定版。
①、從軟件的官方網(wǎng)站下載:
mkdir -p /data0/software
cd /data0/software
wget?http://sysoev.ru/nginx/nginx-0.8.46.tar.gz
wget?http://www.php.net/get/php-5.2.14.tar.gz/from/this/mirror
wget?http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
wget?http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/
wget?http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"
wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"
wget?http://pecl.php.net/get/memcache-2.2.5.tgz
wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"
wget?ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
wget?http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wget?http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget?http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget?http://pecl.php.net/get/imagick-2.3.0.tgz
②、從blog.s135.com下載(比較穩(wěn)定,只允許在本站,或者在Linux/Unix下通過Wget、Curl等命令下載以下軟件):
mkdir -p /data0/software
cd /data0/software
wget?http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz
wget?http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
wget?http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
wget?http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz
wget?http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget?http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz 省略。。。 出處:http://blog.s135.com/nginx_php_v6/
?
總結(jié)
以上是生活随笔為你收集整理的Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE添加新字体需要注意的一些问题
- 下一篇: 蓝光浏览器