Chinaunix首页 | 论坛 | 博客
  • 博客访问: 270724
  • 博文数量: 53
  • 博客积分: 2580
  • 博客等级: 少校
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 10:02
文章分类

全部博文(53)

文章存档

2014年(1)

2013年(1)

2011年(14)

2010年(37)

我的朋友

分类: LINUX

2010-11-30 16:50:32

    在web服务器PHP是非常常见的应用,目前主要应用的CGI模式或者是FastCGI模式的,但CGI模式相对性能比较低下,而FastCGI是一个可伸缩的,高速地在web server和脚本语言间交互的接口,主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。
   FastCGI进程管理有2种:
     1、Lighttpd 的 spawn-fcgi
     2、PHP-FPM
    fpm的php性能相对较高,简单做了下对比测试,如下:
fpm和spawn-fcgi做了个对比测试,还是确实有差异的,如图:
[root@test webbench-1.5]# ./webbench -c 2000 -t 30 
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET 
2000 clients, running 30 sec.
Speed=62116 pages/min, 363195 bytes/sec.
Requests: 31058 susceed, 0 failed.


[root@test webbench-1.5]# ./webbench -c 2000 -t 30 
Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET 
2000 clients, running 30 sec.
Speed=22790 pages/min, 132139 bytes/sec.
Requests: 11389 susceed, 6 failed.
 
下面对fpm的FastCGI的php做简单介绍,便于自己remark。
   
    目前,使用fpm还只是通过 Patch 方式,然后编译
首先要安装一些支持的库文件:
一般来说有libiconv、 libmcrypt、mhash、mcrypt等,如果需要mysql支持 还有一些其他的模块
wget
wget
tar zxvf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
然后编译:
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-iconv-dir=/usr/local --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-xmlrpc --enable-zip --enable-soap
 
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini
几个编译参数简介:
--enable-fastcgi   启用fastcgi模式
--enable-fpm       启用fpm
 
 
接下来编译安装扩展模块:
memcache:用于支持memcache
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
 
eaccelerator:PHP加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍;
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
 
修改php.ini文件
  手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
  修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
  并在此行后增加以下几行,然后保存:
  extension = "memcache.so"
  再查找output_buffering = Off
  修改为output_buffering = On

  再查找; cgi.fix_pathinfo=0
  修改为cgi.fix_pathinfo=0,防止Nginx文件类型错误解析漏洞。
 
配置eAccelerator加速PHP:
mkdir -p /usr/local/webserver/eaccelerator_cache
vi /usr/local/webserver/php/etc/php.ini  在最后面加上以下内容:
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1%
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
 
修改/usr/local/php/etc/php-fpm.conf,内容如下:



  All relative paths in this config are relative to php's install prefix

  


    Pid file
    /usr/local/php/logs/php-fpm.pid

    Error log file
    /usr/local/php/logs/php-fpm.log

    Log level
    notice

    When this amount of php processes exited with SIGSEGV or SIGBUS ...
    10

    ... in a less than this interval of time, a graceful restart will be initiated.
    Useful to work around accidental curruptions in accelerator's shared memory.
    1m

    Time limit on waiting child's reaction on signals from master
    5s

    Set to 'no' to debug fpm
    yes

  


  

    


      Name of pool. Used in logs and stats.
      default

      Address to accept fastcgi requests on.
      Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
      127.0.0.1:9000

      

        Set listen(2) backlog
        -1

        Set permissions for unix socket, if one used.
        In Linux read/write permissions must be set in order to allow connections from web server.
        Many BSD-derrived systems allow connections regardless of permissions.
        
        
        0666
      


      Additional php.ini defines, specific to this pool of workers.
      
        /usr/sbin/sendmail -t -i
        0
      


      Unix user of processes
      www

      Unix group of processes
      www

      Process manager settings
      

        Sets style of controling worker process count.
        Valid values are 'static' and 'apache-like'
        static

        Sets the limit on the number of simultaneous requests that will be served.
        Equivalent to Apache MaxClients directive.
        Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
        Used with any pm_style.
        128

        Settings group for 'apache-like' pm style
        

          Sets the number of server processes created on startup.
          Used only when 'apache-like' pm_style is selected
          20

          Sets the desired minimum number of idle server processes.
          Used only when 'apache-like' pm_style is selected
          5

          Sets the desired maximum number of idle server processes.
          Used only when 'apache-like' pm_style is selected
          35
        

      


      The timeout (in seconds) for serving a single request after which the worker process will be terminated
      Should be used when 'max_execution_time' ini option does not stop script execution for some reason
      '0s' means 'off'
      0s

      The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
      '0s' means 'off'
      0s

      The log file for slow requests
      logs/slow.log

      Set open file desc rlimit
      65535

      Set max core size rlimit
      0

      Chroot to this directory at the start, absolute path
      

      Chdir to this directory at the start, absolute path
      

      Redirect workers' stdout and stderr into main error log.
      If not set, they will be redirected to /dev/null, according to FastCGI specs
      yes

      How much requests each process should execute before respawn.
      Useful to work around memory leaks in 3rd party libraries.
      For endless request processing please specify 0
      Equivalent to PHP_FCGI_MAX_REQUESTS
      1024

      Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
      Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
      Makes sense only with AF_INET listening socket.
      127.0.0.1

      Pass environment variables like LD_LIBRARY_PATH
      All $VARIABLEs are taken from current environment
      
        $HOSTNAME
        /usr/local/bin:/usr/bin:/bin
        /tmp
        /tmp
        /tmp
        $OSTYPE
        $MACHTYPE
        2
      

    

  

阅读(1023) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-01 14:57:25

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2010-12-01 13:50:37

fpm和spawn-fcgi做了个对比测试,还是确实有差异的,如图: [root@test webbench-1.5]# ./webbench -c 2000 -t 30 http://192.168.0.62/i.php Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://192.168.0.62/i.php 2000 clients, running 30 sec. Speed=62116 pages/min, 363195 bytes/sec. Requests: 31058 susceed, 0 failed. [root@test webbench-1.5]# ./webbench -c 2000 -t 30 http://192.168.0.61/i.php Webbench - Simple Web Benchmark 1.5 Copyright (c)