为许多并发用户configurationphp5-fpm

编辑:增加了一些configuration和澄清多less是“多”,按anthonysomerset的要求。

编辑2:添加fastcgi_cache到nginxconfiguration,如由SleighBoybuild议。

我为一个朋友的网站运行一个服务器,时不时会有大量的stream量,大约有200-300个并发用户。 在尖峰之间,服务器有大约70-80个并发用户,并且没有麻烦地处理stream量。

该网站运行在与Debian Squeeze,Nginx,PHP5-FPM + APC(128MB),MySQL 5,memcached(128MB)和Varnish(1GB)的服务器上的W3 Total Cache。 parentesis中的数量是我为它们各自的caching分配了多less。 内存永远不会超过1.8 GB afaik,但可能会有点超额预定。 虽然通常不会造成任何问题

造成这个问题的原因总是PHP5-FPM利用100%的CPU一段时间,然后只是崩溃,导致nginx吐出502错误。 日志build议增加最大的孩子数量,但我想我已经达到了服务器可以处理多less个孩子的限制。 我一直在使用pm.max_requests (0(无限)),但是现在将其设置为1000,以查看重新产生的孩子现在是否可以提供帮助。

/etc/php5/fpm/pool.d/www.conf

 [万维网]
 listen = /var/run/php5-fpm.sock

 user = www-data
 group = www-data

下午=dynamic
 pm.max_children = 200
 pm.start_servers = 20
 pm.min_spare_servers = 20
 pm.max_spare_servers = 60
 pm.max_requests = 1000

/etc/nginx/nginx.conf

用户www-data;
 worker_processes 8;
 pid /var/run/nginx.pid;

事件{
         worker_connections 1024;
 }

 http {
        发送文件;
         tcp_nopush;
         tcp_nodelay;
         types_hash_max_size 2048;

        包括/etc/nginx/mime.types;
         default_type application / octet-stream;

         access_log /var/log/nginx/access.log;
         error_log /var/log/nginx/error.log;

         gzip on;
         gzip_disable“msie6”;

         gzip_vary在;
         gzip_comp_level 9;
         gzip_buffers 16 8k;
         gzip_types text /纯文本/ css应用程序/ json应用程序/ x-javascript文本/ xml应用程序/ xml应用程序/ xml + rss文本/ javascript;

         fastcgi_cache_path / var / cache / nginx levels = 1:2
         keys_zone = PHP5FPMCACHE:10米
        无效=5米;

         fastcgi_cache_key“$ scheme $ request_method $ host $ request_uri”;

        包括/etc/nginx/conf.d/*.conf;
         include / etc / nginx / sites-enabled / *;
 }

/etc/nginx/sites-available/website.com

上游php5-fpm {
    服务器unix:/var/run/php5-fpm.sock;
 }

服务器{
         server_name website.com * .website.com;
         server_name_in_redirect off;
         root /var/www/website.com;
        听8080;
         client_max_body_size 64M;
         access_log /var/log/nginx/website.com.access.log;
         error_log /var/log/nginx/website.com.error.log;

         keepalive_timeout 75;

        位置 / {
                 index index.php;
                重写^。* / files /(.*)/wp-includes/ms-files.php?file=$1 last;
                如果(!-e $ request_filename){
                        重写^(。+)$ /index.php?q=$1 last;
                 }

         }

        位置〜* ^。+ \。(jpg | jpeg | gif | css | png | js | ico | xml)$ {
                到期30天;
                 access_logclosures;
         }

        位置〜\ .php $ {
                 fastcgi_pass php5-fpm;
                 fastcgi_cache PHP5FPMCACHE;
                 fastcgi_cache_valid 200 302 1h;
                 fastcgi_cache_valid 301 1d;
                 fastcgi_cache_valid任何1m;
                 fastcgi_cache_min_uses 1;
                 fastcgi_cache_use_stale错误超时invalid_header http_500;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
                包括/ etc / nginx / fastcgi_params;
         }

 }

/etc/varnish/website.vcl

后端默认{
 .host =“127.0.0.1”;
 .port =“8080”;
 }

 sub vcl_recv {
 #规范化内容编码
     if(req.http.Accept-Encoding){
        如果(req.url〜“\。(jpg | png | gif | gz | tgz | bz2 | lzma | tbz)(\?。* |)$”){
            删除req.http.Accept-Encoding;
         } elsif(req.http.Accept-Encoding〜“gzip”){
            设置req.http.Accept-Encoding =“gzip”;
         } elsif(req.http.Accept-Encoding〜“deflate”){
            设置req.http.Accept-Encoding =“deflate”;
         } else {
            删除req.http.Accept-Encoding;
         }
     }
 #删除cookies和查询string的真实静态文件
     if(req.url〜“^ / [^?] + \。(jpeg | jpg | png | gif | ico | js | css | txt | gz | zip | lzma | bz2 | tgz | tbz | html | htm)( \?。* |)$“){
        unset req.http.cookie;
       设置req.url = regsub(req.url,“\?。* $”,“”);
     }
 #从首页删除cookies
     if(req.url〜“^ / $”){
        unset req.http.cookie;
     }
 }

这是一款拥有4核和超线程(所以“8核”)和2GB内存的VPS。 我知道硬件节点(物理服务器)远远没有被超量使用,几乎没有被利用(因为我在托pipe公司工作了一个月左右),所以它几乎是一个专用的服务器。

如果您需要任何规格,请询问。

我怀疑你的清漆caching没有caching足够的命中

这是我会在你的情况下做什么:

降低PHP的最大孩子到100甚至50(如果清漆能正常工作,你不需要他们)也删除最大请求线,以使PHP进程不会重生太快,从而防止APC清除得太快,这是也不好

IF也不好,根据nginx – http://wiki.nginx.org/IfIsEvil

我会改变这一行:

  if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } 

至:

 try_files $uri $uri/ /index.php?$args; 

如果你的nginx版本支持它(非常确定,如果你的nginx版本大于0.7.51,那么它支持它)

您还应该考虑直接将w3tc nginx规则插入到您的vhost文件中,以启用正确的磁盘增强页面caching(这比使用nginx的APCcaching更快)

看看我用于网站的以下清漆vcl – 你需要通读和编辑你的网站的一些东西 – 它也假定它只有在服务器上的WP站点和服务器上只有一个站点,它可以很容易被修改为更多的网站(看看cookie部分)

通用的VCL: https ://gist.github.com/b7332971a848bcb7ecef

有了这个configuration,我会争辩删除fastcgi_cache,以防止任何可能的问题与caching链发生,因为试图find任何杂散的旧caching条目是困难的

也告诉w3tc清漆是在127.0.0.1,它会清除它;)

我周三晚上部署了这个服务器(有几个域特定的修改),处理2500个活动站点访问者,它将负载减less到小于1,大约运行的PHP儿童大约在10-20(这个数字取决于login的用户数量和其他因素,比如cookies),这个服务器确实有更多的内存,但是原理是一样的,你应该能够轻松处理你在峰值时获得的访问者数量

APC和nginx fastcgi_cache将会帮助你很多。