如何面对你—LNMP高并发时502 推荐
2014-10-13 18:01
225 查看
问题:最近的抢购有点火,到点抢购的时候网站就会出现502错误 顶不住消费者的压力。
伤。。。。。
之前php-fpm配置:
单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-fpm进程数300,具体参数如下
初步解决:各种相关优化,
增大pm.max_children为400
nginx和fpm 添加了 listen.backlog = 2048
最大打开文件句柄数 65535
/etc/sysctl.conf 都进行了微调,高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞。依然出现502错误
终极解决方法:
启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。
具体操作:
配置nginx
编辑nginx.conf 主配置文件,如果后端采用虚拟主机,跟我一样,
添加
upstream backend{
server unix:/tmp/php-cgi.sock;
server unix:/tmp/php-cgi2.sock;
}
vi vhost/test.conf
修改此处 fastcgi_pass backend; 调用fastcgi是,使用负载均衡的方式。
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass backend;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
# include pathinfo.conf;
}
重启nginx。
等待验证吧,502错误会大大地减少,网站抢购甚欢,消费者甚欢。
总结:
高并发时使用tcp端口的方式比socket方式相对稳定一点,但是使用端口的方式,处理的效率确实比socket效率低了那么一点。LNMP环境下,在面对高并发时,除了一个合理的架构,与合理的调优之外,开发者的代码逻辑与高效的代码也是影响高并发的一个重要因素。一个请求调用多少次php-fpm,每个php-fpm处理多少时间,都是开发者需要考虑的点。
伤。。。。。
之前php-fpm配置:
单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-fpm进程数300,具体参数如下
listen = /tmp/php-cgi.sock #listen = 127.0.0.1:9000 listen.backlog = 2048 listen.allowed_clients = 127.0.0.1 pm = static pm.max_children = 300 pm.start_servers = 50 pm.min_spare_servers = 30 pm.max_spare_servers = 250 request_terminate_timeout = 0 request_slowlog_timeout = 2由于架构,代码等原因,单台几百并发就出现502错误。
初步解决:各种相关优化,
增大pm.max_children为400
nginx和fpm 添加了 listen.backlog = 2048
最大打开文件句柄数 65535
/etc/sysctl.conf 都进行了微调,高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞。依然出现502错误
终极解决方法:
启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。
具体操作:
cp php-fpm.conf php-fpm2.conf vi php-fpm2.conf 做相应的修改 [global] pid = /usr/local/php/var/run/php-fpm2.pid error_log = /usr/local/php/var/log/php-fpm2.log log_level = notice [www] listen = /tmp/php-cgi2.sock #listen = 127.0.0.1:9000 listen.backlog = 2048 listen.allowed_clients = 127.0.0.1 pm = static pm.max_children = 200 pm.start_servers = 50 pm.min_spare_servers = 30 pm.max_spare_servers = 250 request_terminate_timeout = 0 request_slowlog_timeout = 2 slowlog = var/log/slow.log cp /etc/init.d/php-fpm /etc/init.d/php-fpm2 vi /etc/init.d/php-fpm2 修改 prefix=/usr/local/php exec_prefix=${prefix} php_fpm_BIN=${exec_prefix}/sbin/php-fpm php_fpm_CONF=${prefix}/etc/php-fpm2.conf php_fpm_PID=${prefix}/var/run/php-fpm2.pid启动php-fpm2即可
配置nginx
编辑nginx.conf 主配置文件,如果后端采用虚拟主机,跟我一样,
添加
upstream backend{
server unix:/tmp/php-cgi.sock;
server unix:/tmp/php-cgi2.sock;
}
vi vhost/test.conf
修改此处 fastcgi_pass backend; 调用fastcgi是,使用负载均衡的方式。
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass backend;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
# include pathinfo.conf;
}
重启nginx。
等待验证吧,502错误会大大地减少,网站抢购甚欢,消费者甚欢。
总结:
高并发时使用tcp端口的方式比socket方式相对稳定一点,但是使用端口的方式,处理的效率确实比socket效率低了那么一点。LNMP环境下,在面对高并发时,除了一个合理的架构,与合理的调优之外,开发者的代码逻辑与高效的代码也是影响高并发的一个重要因素。一个请求调用多少次php-fpm,每个php-fpm处理多少时间,都是开发者需要考虑的点。
相关文章推荐
- [转]你如何面对—LNMP高并发时502
- 如何面对你―LNMP高并发时502
- 如何面对“算法”的困惑? 推荐
- 如何面对职场 推荐
- 面对低薪水该如何——网络工程师你是否真的已经倒下(一) 推荐
- 完整构建LNMP,简单优化实现超高并发访问! 推荐
- 面对复杂的管理如何进行自我调试(项目经理修炼手册第一章) 推荐
- 交互设计师和产品经理必读,推荐《QQ阅读 设计之路》讲述了QQ阅读的前世、今生、来世。面对这么多业界的阅读器,QQ阅读如何脱颖而出,占据市场,一起看看QQ阅读的发展过程。
- 推荐阅读:HP大中华区前总裁孙振耀谈如何面对工作和生活(转)
- 老黄坐诊记(2):面对新技术,企业如何“化险为夷” 推荐
- 访问数据库时如何解决并发问题
- [鹿鸣推荐]当我们面对Bug得时候
- 项目管理中可能有的问题,以及如何去面对!
- [今日图书推荐]如何做好SQLServer数据库性能的优化
- 如何面对高水平的破解组织 谈暴力破解应对
- 面对就业:我们该如何度过大学?
- IT人如何面对不如妓女的境况?
- 企业如何应对BT传输 推荐
- [转贴]如何迅速成为Java高手[值得推荐:对于初学者,也对于IT中浮躁者]
- 如何面对痛苦