@42withyou
2015-03-04T03:05:46.000000Z
字数 2239
阅读 643
Justering
青基会红包项目,增加php-fpm到四个后每秒请求数从90到了350
服务器在遇到高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞,所以容易出现502错误。
那么我们可以给php-fpm开启多个实例解决高并发下nginx出现 502 的问题
这里以青基会红包项目作为演示,启用四个php-fpm实例,把php-fpm分为四部分,每部分各听一个端口或socket,这样就减少了lock,采用nginx的upstream负载均衡,轮询每个socket来处理请求。
cd /usr/local/php/etccp php-fpm.conf php-fpm1.confcp php-fpm.conf php-fpm2.confcp php-fpm.conf php-fpm3.confvim php-fpm1.conf# start php-fpm1.conf[global]# 修改处1pid = /usr/local/php/var/run/php-fpm2.piderror_log = /usr/local/php/var/log/php-fpm2.loglog_level = erroremergency_restart_threshold = 60emergency_restart_interval = 40[www]# 修改处2listen = /tmp/php-cgi2.socklisten.backlog = 2048listen.allowed_clients = 127.0.0.1listen.owner = wwwlisten.group = wwwlisten.mode = 0666user = wwwgroup = wwwpm = dynamicpm.max_children = 600;pm.start_servers = 225pm.min_spare_servers = 8pm.max_spare_servers = 16request_terminate_timeout = 20request_slowlog_timeout = 0# 修改处3slowlog = /usr/local/php/var/log/slow2.loglisten.allowed_clients = 127.0.0.1pm.status_path = /xxxxxxfpmstatus# end php-fpm1.conf
cd /etc/init.d/cp php-fpm php-fpm1cp php-fpm php-fpm2cp php-fpm php-fpm3vim php-fpm1php_fpm_BIN=${exec_prefix}/sbin/php-fpmphp_fpm_CONF=${prefix}/etc/php-fpm1.conf # 修改处1,对应上面的配置文件php_fpm_PID=${prefix}/var/run/php-fpm1.pid # 修改处2service php-fpm1 startservice php-fpm2 startservice php-fpm3 start
# 在 http 块之后添加 phpbackend 是名字随便起# 把 pf 配置到不同的机器上,就是正宗的负载均衡了upstream phpbackend {# 可以选择分配模式 weight 权重,或者 ip_hash...server unix:/tmp/php-cgi.sock weight=100 max_fails=5 fail_timeout=5;server unix:/tmp/php-cgi1.sock weight=100 max_fails=5 fail_timeout=5;server unix:/tmp/php-cgi2.sock weight=100 max_fails=5 fail_timeout=5;server unix:/tmp/php-cgi3.sock weight=100 max_fails=5 fail_timeout=5;}
vim vhost/hb_test.confserver{listen 80;server_name 182.92.68.139;index index.html index.htm index.php;root /home/wwwroot/cydf_hongbao_test;include /home/wwwroot/cydf_hongbao_test/nginx_rewrite.conf;location ~ .*\.(php|php5)?${try_files $uri =404;# 修改为上面配置的 upstreamfastcgi_pass phpbackend;# fastcgi_pass unix:/tmp/php-cgi.sock;fastcgi_index index.php;include fastcgi.conf;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;}location ~ .*\.(js|css)?${expires 12h;}access_log /home/wwwlogs/hongbao_test-access.log access;error_log /home/wwwlogs/hongbao_test-error.log error;}