| 
 | 
 
php-fpm不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi。 
php-fpm的使用非常方便,配置都是在php-fpm.ini的文件内 
而启动,重启都可以从php/sbin/php-fpm中进行 
更方便的是修改php.ini后可以直接使用php-fpm reload进行加载无需杀掉进程就可以完成php.ini的修改加载 
结果显示使用php-fpm可以使php有不小的性能提升 
php-fpm控制的进程.cpu回收的速度比较慢.内存分配的很均匀 
而spawn-cgi控制的进程CPU下降的很快.而内存分配的比较不均匀. 
有很多进程似乎未分配到,而另外一些却占用很高. 
可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降 
而php-fpm合理的分配.导致总体响应的提到以及任务的平均 
使用php-fpm需要在php源码上打补丁,然后重新编译php 
 
一.下载php-fpm 
wgethttp://cn.php.net/get/php-5.2.8.tar.gz/from/www.php.net/mirror 
wgethttp://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz 
与php-5.2.9在同一级目录 
gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.9-p1 
补丁打好以后,编译php的时候增加了下面几个参数: 
–enable-fpm 激活fastcgi模式的fpm支持 
–with-fpm-conf php-fpm的配置文件(默认是PREFIX/etc/php-fpm.conf) 
–with-fpm-log php-fpm的日志文件(默认是PREFIX/logs/php-fpm.log) 
–with-fpm-pid php-fpm的pid文件(默认是PREFIX/logs/php-fpm.pid) 
./configure --prefix=/EBS/php \ 
--with-config-file-path=/EBS/php/etc \ 
--enable-fastcgi \ 
--enable-fpm \ 
--OTHERS 
注:--enable-fastcgi \ 需要在--enable-fpm \的前面,否则,fpm不能编译上。 
 
二.编译好php后,修改配置文件 
vi /EBS/php/etc/php-fpm.conf 
需要注意下面几处配置 
<valuename="listen_address">127.0.0.1:9000</value> 
这个表示php的fastcgi进程监听的ip地址以及端口 
<value name="user">nobody</value> 
<value name="group">nobody</value> 
表示php的fastcgi进程以什么用户以及用户组来运行,默认该行是注释掉的,需要打开 
<value name="display_errors">0</value> 
是否显示php错误信息 
<value name="max_children">5</value> 
最大的子进程数目 
运行php-fpm: 
php-fpm用一个程序来控制fastcgi进程,这个文件在$PREFIX/sbin/php-fpm 
/usr/local/php/sbin/php-fpm 
该程序有如下参数: 
start 启动php的fastcgi进程 
stop 强制终止php的fastcgi进程 
quit 平滑终止php的fastcgi进程 
restart 重启php的fastcgi进程 
reload 重新加载php的php.ini 
logrotate 重新启用log文件 
也就是说,在修改了php.ini之后,我们可以使用 
/usr/local/php/sbin/php-fpm reload 
这样,就保持了在php的fastcgi进程持续运行的状态下,又重新加载了php.ini。 
user www www; 
worker_processes 10; 
error_log logs/error.log notice; 
pid logs/nginx.pid; 
#Specifies the value for maximum file descriptors that can beopened by this process. 
worker_rlimit_nofile 51200; 
events 
{ 
   use epoll; 
   worker_connections 51200; 
} 
http 
{ 
   include mime.types; 
   default_type application/octet-stream; 
   charset gb2312; 
   server_names_hash_bucket_size 128; 
   #sendfile on; 
   #tcp_nopush on; 
   keepalive_timeout 60; 
   tcp_nodelay on; 
   gzip on; 
   gzip_min_length 1k; 
   gzip_buffers 4 8k; 
   gzip_http_version 1.1; 
   gzip_types text/plain application/x-javascripttext/css text/html application/xml; 
   { 
   listen 80; 
   server_name 192.168.1.2; 
   index index.html index.htm index.php; 
   root /EBS/www; 
   if (-d $request_filename) 
   { 
   rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent; 
   } 
   location ~ .*\.php?$ 
   { 
   include fcgi.conf 
 
   fastcgi_pass 127.0.0.1:9000; 
   fastcgi_index index.php; 
   } 
   log_format access '$remote_addr - $remote_user[$time_local] "$request" ' 
   '$status $body_bytes_sent "$http_referer" ' 
   '"$http_user_agent" $http_x_forwarded_for'; 
   access_log logs/access.log access; 
   } 
} 
 |   新建配置文件 
/usr/local/nginx/conf/fcgi.conf 
注:nginx自带了一个配置文件,/usr/local/nginx/conf/fastcgi_params,该配置文件缺少粗体字体的部分,会造成访问php文件时报404错误。 
 
fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
fastcgi_param SERVER_SOFTWARE nginx; 
fastcgi_param QUERY_STRING $query_string; 
fastcgi_param REQUEST_METHOD $request_method; 
fastcgi_param CONTENT_TYPE $content_type; 
fastcgi_param CONTENT_LENGTH $content_length; 
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name; 
fastcgi_param SCRIPT_NAME $fastcgi_script_name; 
fastcgi_param REQUEST_URI $request_uri; 
fastcgi_param DOCUMENT_URI $document_uri; 
fastcgi_param DOCUMENT_ROOT $document_root; 
fastcgi_param SERVER_PROTOCOL $server_protocol; 
fastcgi_param REMOTE_ADDR $remote_addr; 
fastcgi_param REMOTE_PORT $remote_port; 
fastcgi_param SERVER_ADDR $server_addr; 
fastcgi_param SERVER_PORT $server_port; 
fastcgi_param SERVER_NAME $server_name; 
# PHP only, required if PHP was built with--enable-force-cgi-redirect 
#fastcgi_param REDIRECT_STATUS 200; 
 |  
  
四 配置XCache 
1、安装xcache模块 
wgethttp://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz 
tar -xvzf xcache-1.2.2.tar.gz 
cd xcache-1.2.2 
/usr/local/php/bin/phpize 
./configure --with-php-config=/usr/local/php/bin/php-config--enable-xcache --enable-xcache-optimizer 
make 
make install 
2、计算密码的md5值 
echo -n "password"|md5sum 
5f4dcc3b5aa765d61d8327deb882cf99 
3、配置XCache 
;注:zend_extension,用来加载zend的扩展,是绝对路径,extension是相对路径,相对于extension_dir的相对路径,非zend扩展 
如果你更改路径以后,一定要apachectl stop后再start,而不要restart。 
vi /usr/local/php/etc/php.ini 
添加: 
[xcache-common] 
zend_extension =/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so 
[xcache.admin] 
; Change xcache.admin.user to your preferred login name 
xcache.admin.user = "admin" 
; Change xcache.admin.pass to the MD5 fingerprint of yourpassword 
; Use md5 -s "your_secret_password" to find the fingerprint 
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99" 
[xcache] 
; Change xcache.size to tune the size of the opcode cache 
xcache.size = 24M 
xcache.shm_scheme = "mmap" 
xcache.count = 2 
xcache.slots = 8K 
xcache.ttl = 0 
xcache.gc_interval = 0 
; Change xcache.var_size to adjust the size of variablecache 
xcache.var_size = 8M 
xcache.var_count = 1 
xcache.var_slots = 8K 
xcache.var_ttl = 0 
xcache.var_maxttl = 0 
xcache.var_gc_interval = 300 
xcache.test = Off 
xcache.readonly_protection = On 
xcache.mmap_path = "/tmp/xcache" 
xcache.coredump_directory = "" 
xcache.cacher = On 
xcache.stat = On 
xcache.optimizer = Off 
[xcache.coverager] 
xcache.coverager = On 
xcache.coveragedump_directory = "" 
 |  
  
5、重启PHP模块 
正常load之后, 
在phpinfo显出的信息内 
Zend这快应该会加上XCache的内容 
 
 6、另外两种加速模块: 
在我们的测试中,效果都要好于xcache,这3中加速不能同时存在两种,有冲突。 
6.1 apc 
wget http://pecl.php.net/get/APC-3.0.19.tgz 
cd APC-3.0.19 
/usr/local/php/bin/phpize 
./configure --enable-apc --enable-apc-mmap--with-apxs=/EBS/apache/bin/apxs--with-php-config=/EBS/php/bin/php-config 
make 
make install 
6.2 eaccelerator 
wgethttp://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip 
cd eaccelerator-0.9.5.3 
/usr/local/php/bin/phpize 
./configure --enable-eaccelerator=shared--with-php-config=/EBS/php/bin/php-config 
make 
make install 
vi php.ini 
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so" 
eaccelerator.shm_size="16" 
eaccelerator.cache_dir="/tmp/eaccelerator" 
eaccelerator.enable="1" 
eaccelerator.optimizer="1" 
eaccelerator.check_mtime="1" 
eaccelerator.debug="0" 
eaccelerator.filter="" 
eaccelerator.shm_max="0" 
eaccelerator.shm_ttl="0" 
eaccelerator.shm_prune_period="0" 
eaccelerator.shm_only="0" 
eaccelerator.compress="1" 
eaccelerator.compress_level="9" 
 
五、使用nginx对应多台facgi服务器 
思路:前端一台nginx,用于做为负载均衡和处理静态页面。利用nginx的upstream模块来将php请求分发到后段的php-fpm服务器上。 
后端多台php-fpm的服务器,只起php-fpm服务来处理php。 
这样做减少了php-fpm上的nginx服务,相当于少了一层。 |   
 
 
 
 |